我在地图 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() 的意外行为的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在 React JS 中遇到意外错误 [重复]

React Native 中的意外 Promise

Jest 在 typescript 中遇到了一个意外的标记

C++ u8 文字 - Windows 上的意外编码

我在我的 Firestore DB 文档中添加了一个地图作为一个字段,里面有一个子字段,我的 RecyclerView 遇到了问题

C++ const 正确性漏洞或意外使用?