我有 map ,哪些键是std::string。我想在 map 中找到以"DUPA/"
前缀开头的那些元素。找到下限很容易,但是上限有点问题。我写了这样的代码:
const char* prefix = "DUPA/";
const char* firstAfterPrefix = "DUPA0";
auto prefixedBeginIt = myMap.upper_bound(prefix);
auto prefixedEndIt = myMap.lower_bound(firstAfterPrefix);
该代码可以正常工作,但是我认为它不是很优雅,因为必须知道
0
在ASCII表中首先在/
之后。第二种方法是复制前缀并增加最后一个符号。您知道更优雅的解决方案吗? 最佳答案
我认为您提到的解决方案已经是最优雅的了。 KISS方式会损失很多性能,也就是说,每次都要检查 key :
while(prefixedBeginIt->first == prefix)
{
//...
++prefixedBeginIt;
}
因此,我认为计算下一个字符是最好的方法:
std::string firstAfterPrefix = prefix;
++firstAfterPrefix[firstAfterPrefix.length() - 1];
auto prefixedEndIt = myMap.lower_bound(firstAfterPrefix);