在使用标准库 map 容器时,是否有任何方法可以获取迭代器,而无需在整个容器中进行搜索?
我有一个 map 管理类,我希望返回与添加到 map 的项目关联的迭代器。如果可能的话,我不想依赖 find() 。如果我能避免搜索,我觉得一切都更好。
std::map<char, bool>::iterator ClassA::Add(char item)
{
mymap[item] = false;
return mymap.get_iterator_lastitem();
}
也许
return mymap.end() - 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
都返回一对迭代器和一个 bool 值,其中迭代器指向插入的或现有的元素, bool 值表示是否插入( true
) 发生或者如果没有发生 (false
),其中返回的迭代器指向具有键的已经存在的元素。
关于c++ - 添加到 std::map 时获取迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25073304/