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

标签 c++ dictionary stl

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

相关文章:

c++ - 卡萨布兰卡:在 linux centos 上的汇编错误 gcc 4.8.1

c++ - 在 C++ 中复制类似数据结构的任何模板方式、通用方法?

ios - 无法访问函数外定义的字典

python - 查找列表中的哪个元素是字典中的键以及它的值是什么

c++ - map operator[] 的返回值(和 "at"方法)

c++ - 我是否保证在 move vector 后指向 std::vector 元素的指针有效?

C++ 有符号/无符号不匹配

c++ - [在文本文件中搜索][C++中的Notepad++插件]

c++ - KMP算法和LPS表构建的运行时间

python - 并行化列表过滤