c – 将值分配给unordered_map的基本问题

我有一个unordered_map存储int作为键作为一个指针作为值.我需要检查键的存在.如果密钥不可用,我需要插入密钥和值.哪一个是更好的方法

谢谢.

unordered_map<int,classA*>testMap;
classA* ptr = testMap[1];
if(ptr == NULL)
   testMap[1] = new classA;


OR

unordered_map<int,classA*>::iterator it = testMap.find(1);
if(it == testMap.end())
{
  testMap.insert(make_pair(1,new classA));
}

解决方法

这两种方法都不好,因为两者都可以在地图中使用两个查询.

更好的方法是检索对元素的引用,如果该引用是空指针,则分配给它:

classA*& ptr = testMap[1];
if (ptr == 0)
    ptr = new classA;

这是因为查询地图中不存在的元素会自动插入(认构造,因此将插入空指针),而operator []返回对该元素的引用(无论是新创建还是已存在).

但请注意,此方法(或您的第一种方法)和第二种方法间的语义巧妙地不同:如果键不存在于地图中,则第二种方法仅插入该元素.我的方法(和你的第一个方法)也创建一个新的元素,如果键实际上已经存在,但它的值是一个空指针.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...