gpt4 book ai didi

c++ - 添加到 std::map 时获取迭代器?

转载 作者:行者123 更新时间:2023-11-28 06:45:34 25 4
gpt4 key购买 nike

在使用标准库 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;
}

Live example

insertemplace 都返回一对迭代器和一个 bool 值,其中迭代器指向插入的或现有的元素, bool 值表示是否插入( true) 发生或者如果没有发生 (false),其中返回的迭代器指向具有键的已经存在的元素。

关于c++ - 添加到 std::map 时获取迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25073304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com