为什么 C map.insert() 不会覆盖

新手上路,请多包涵

在下面的代码中:

 #include <map>
#include <utility>
#include <iostream>

using namespace std;

int main(){
  pair<int,int> p1(1,1);
  pair<int,int> p2(1,2);

  map<int,int> m;
  m.insert(p1);
  m.insert(p2);

  cout << "Map value: "<< m.at(1) << endl;

}

它打印出: Map value: 1 ,为什么 m.insert(p2) 不会覆盖地图中的前一个实体?

原文由 user4177980 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 778
2 个回答

std::map::insert 参考文献中说:

如果容器尚未包含具有等效键的元素,则将元素插入容器中。

原文由 betteroutthanin 发布,翻译遵循 CC BY-SA 3.0 许可协议

map.insert() 仅在容器尚未包含具有等效键的元素时插入。

您应该使用 operator[] 代替:

  m[p2.first] = p2.second;

原文由 yizzlez 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题