如何检查C++ STL中unordered_map的指定键是否不存在?
正确检查unordered_map键是否存在的方法
你遇到的问题根源在于使用revert[id]时,若键id不存在,unordered_map会自动插入该键并默认构造对应的vector——虽然正常情况下默认构造的vector size应为0,但你看到的异常大值大概率是内存未定义行为导致的,更关键的是这种方式会直接修改原map,导致后续判断完全失效。
推荐两种安全的检查方式:
方法1:使用find()方法
find()会返回指向目标键的迭代器,若键不存在则返回map.end(),不会修改原map:
if (revert.find(id) == revert.end()) { // 此处处理id不存在的逻辑 }
方法2:使用count()方法
count()返回目标键在map中的出现次数(unordered_map中键唯一,所以结果只能是0或1),同样不会修改原map:
if (revert.count(id) == 0) { // 此处处理id不存在的逻辑 }
如果你确实需要访问该键对应的vector,可以先检查存在性再操作,比如:
auto it = revert.find(id); if (it != revert.end()) { // 访问it->second来操作对应的vector auto& vec = it->second; // ... } else { // 键不存在的处理 }
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

