c – 将值分配给unordered_map的基本问题
发布时间:2020-12-16 05:32:40 所属栏目:百科 来源:网络整理
导读:我有一个unordered_map存储int作为键作为一个指针作为值.我需要检查键的存在.如果密钥不可用,我需要插入密钥和值.哪一个是更好的方法? 谢谢. unordered_mapint,classA*testMap;classA* ptr = testMap[1];if(ptr == NULL) testMap[1] = new classA;ORunorder
我有一个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 []返回对该元素的引用(无论是新创建还是已存在). 但请注意,此方法(或您的第一种方法)和第二种方法之间的语义巧妙地不同:如果键不存在于地图中,则第二种方法仅插入该元素.我的方法(和你的第一个方法)也创建一个新的元素,如果键实际上已经存在,但它的值是一个空指针. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |