C++中unordered_map表现是否符合预期?为何(1,3)未出现在输出中
为什么(1,3)没有出现在unordered_map的输出中?
先看你定义的update函数,它的核心逻辑是为每个key仅保留最大的关联value,代码如下:
void update(int key, int value) { auto it = maxima.find(key); if (it == maxima.end()) { maxima.emplace(key, value); } else if (value > it->second) { it->second = value; } }
这个函数的执行规则很明确:
- 如果传入的
key在maxima哈希表中不存在,就把(key, value)插入表中 - 如果
key已经存在,只有当新的value大于当前表中该key对应的旧value时,才会更新value;新value小于或等于旧value时,不会做任何修改
再看你的测试调用流程:
- 首先执行
update(1,6):此时表中没有key=1,所以成功插入(1,6) - 之后执行
update(1,3):此时key=1已经存在,对应的旧value是6,而3 < 6,不满足value > it->second的更新条件,所以这次调用不会改变表中key=1的value,它仍然是6
因此最终哈希表中key=1对应的是6而不是3,输出里自然只会出现1 6,不会有1 3。
另外需要注意:std::unordered_map是无序容器,它的遍历顺序和元素插入顺序无关,这就是为什么你看到的输出顺序是2、4、1、3,但每个key都保留了调用过程中传入的最大value。
内容的提问来源于stack exchange,提问作者SK_33
相关产品推荐
相关产品推荐

