在使用不需要在整个容器中搜索的标准库地图容器时,是否有任何获取迭代器的方法?
我有一个地图的管理类,我希望返回与添加到地图中的项相关联的迭代器。如果可能的话,我不想依赖find()。如果我可以避免搜索,我就会更好。
std::map<char, bool>::iterator ClassA::Add(char item)
{
mymap[item] = false;
return mymap.get_iterator_lastitem();
}
也许
return mymap.end() - 1;
答案 0 :(得分:1)
如果你没有使用C ++ 11,那么
std::map<char, bool>::iterator ClassA::Add(char item)
{
std::pair<std::map<char, bool>::iterator, bool> result = mymap.insert(std::make_pair(item, false));
if(!result.second) {
// Item already exists, modify that existing item
result.first->second = false;
}
return result.first;
}
如果您使用的是C ++ 11,那么最好使用emplace
+ auto
。
std::map<char, bool>::iterator ClassA::Add(char item)
{
auto result = mymap.emplace(item, false);
if(!result.second) {
// Item already exists, modify that existing item
result.first->second = false;
}
return result.first;
}
insert
和emplace
都返回一对迭代器和一个布尔值,迭代器指向插入或现有元素,布尔值表示是否插入(true
)发生了或者如果没有(false
),返回的迭代器使用键指向已存在的元素。