我在地图 C++ 中遇到了 count() 的意外行为
Posted
技术标签:
【中文标题】我在地图 C++ 中遇到了 count() 的意外行为【英文标题】:I am getting unexpected behavour of count() in map C++ 【发布时间】:2021-05-08 13:07:01 【问题描述】:#include<bits/stdc++.h>
using namespace std;
int main()
map<int, int> nums_map;
cout << nums_map.count(0) << endl;
int a = nums_map[0];
cout << nums_map.count(0) << endl;
cout << nums_map[0];
return 0;
输出: 0 1 0
至少对我来说没有任何意义,为什么这条线:
int a = nums_map[0];
将count的值增加1,同时nums_map.empty()
= 0。
【问题讨论】:
std::map::operator[]
值初始化该键处的元素(如果不存在)。这就是允许您初始化 a
的原因。
【参考方案1】:
因为std::map::operator[]
的工作方式有点奇怪。来自the documentation on std::map::operator[]
:
返回对映射到与 key 等效的键的值的引用,如果这样的键不存在,则执行插入。
因此,如果密钥不存在,它会创建一个新对。这正是这里发生的事情。
#include <iostream>
#include <map>
int main()
using namespace std;
map<int, int> nums_map; // nums_map ==
cout << nums_map.count(0) << endl; // 0, because the map is empty
int a = nums_map[0]; /* a new key/value pair of 0, 0 is
created and a is set to nums_map[0],
which is 0 */
cout << nums_map.count(0) << endl; // Since there is one key 0 now, this shows 1
cout << nums_map[0]; // As shown previously, nums_map[0] is 0
return 0;
【讨论】:
以上是关于我在地图 C++ 中遇到了 count() 的意外行为的主要内容,如果未能解决你的问题,请参考以下文章
我在我的 Firestore DB 文档中添加了一个地图作为一个字段,里面有一个子字段,我的 RecyclerView 遇到了问题