6
我碰到以下问题排在计算器 std::map insert or std::map find?查找()VS LOWER_BOUND + key_comp
为什么使用find()认为不如LOWER_BOUND()+ key_comp()?
假设我有以下的地图
map<int, int> myMap;
myMap[1]=1;
myMap[2]=3;
myMap[3]=5;
int key = xxx; //some value of interest.
int value = yyy;
建议的答案是使用
map<int, int>::iterator itr = myMap.lower_bound(key);
if (itr != myMap.end() && !(myMap.key_comp()(key, itr->first)))
{
//key found.
// do processing for itr->second
//
}else {
//insert into the end position
myMap.insert (itr, map<int, int>::value_type(key, value));
}
为什么它比下面的更好吗?
map<int, int>::iterator itr = myMap.find(key);
if (itr != myMap.end())
{
//key found.
// do processing for itr->second
//
}else {
//insert into the end position
myMap.insert (itr, map<int, int>::value_type(key, value));
}
参照Daniel的回答,请注意''lower_bound'版本的代码中注释'//插入结束位置'不正确。即使在代码的“find”版本中,它也是不正确的,因为新元素总是按照map的排序顺序插入到正确的位置。你传入的迭代器只是一个提示,如果它是正确的,将提高性能。 –