C:有条件地将键和值插入到std :: map中

C:有条件地将键和值插入到std :: map中,第1张

概述如果我做: std::map<string, size_t> word_count;size_t value = word_count.count("a") == 0 ? 1 : 2;word_count["a"] = value; 那么如我所料,word_count [“a”]的最终值为1.如果我改为: std::map<string, size_t> word_count;word_co 如果我做:
std::map<string,size_t> word_count;size_t value = word_count.count("a") == 0 ? 1 : 2;word_count["a"] = value;

那么如我所料,word_count [“a”]的最终值为1.如果我改为:

std::map<string,size_t> word_count;word_count["a"] = word_count.count("a") == 0 ? 1 : 2;

那么word_count [“a”]的最终值是2.为什么?

解决方法 正式地,任务的任一方可以先评估.由执行决定哪一个.如果word_count不包含“a”,则插入一个,并返回一个左值引用.如果word_count包含一个,只有后一部分发生.尽管首先评估哪一方面的不确定性,您可以按照可能的执行情况:

左边第一

没有元素存在:

operator []插入元素,因为它不在那里. count()找到它并返回1,所以最终它被赋值为2.

元素存在:

operator []返回现有的元素,count()找到它并返回1,所以最终它被赋值为2.

右边第一

没有元素存在:

count()返回0,所以你从右边得到1.然后,将“a”插入到地图中,并赋值1.

元素存在:

count()返回1,所以你从右边得到2.然后,访问word_count [“a”],并为其分配2.

结论

简而言之,你不能依靠这个来做你想要的,所以最好使用你可以依靠的东西. mrFontanini提出了一个很好的建议,所以我会编辑一下:

word_count["a"]++;word_count["a"] = std::min(word_count["a"],2);

第一行确保它被插入并且具有至少为1的值.在重复执行此 *** 作的情况下,值为最大值的第二个限制为2.

笔记

我基于这个答案:

>当选择一方进行评估时,必须先对方进行评估,然后再对方进行评估.
>构造如word_count [“a”] = 1表现出明确的行为,即使在元素被插入然后分配到的情况下也是如此.

下面有关于这些是否真实的一些辩论和讨论.我现在已经做了一个more official.

总结

以上是内存溢出为你收集整理的C:有条件地将键和值插入到std :: map中全部内容,希望文章能够帮你解决C:有条件地将键和值插入到std :: map中所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1235663.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存