c++ - 为什么不能在 STL 映射中插入值?

标签 c++

我在映射中插入键值,但无论我在第 14 行更改值,该值始终等于零,而第 13 行的“if”语句从未执行过。 这是代码,编译器是 ubuntu 18.04 中的 gcc 7.4.0

#include<iostream>
#include<map>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int a;
    map<int, int> num;
    map<int, int>::iterator p;
    for (int i = 0;i < n; i++){
        cin>>a;
        if(num[a]) num[a]++;
        else num.insert(make_pair(a,1));
    }
    for (p=num.begin();p!=num.end(); p++)
        cout<<p->first<<" "<<p->second<<endl;
    return 0;
}

当我输入时

6

10 1 10 20 30 20

对于程序,我期望输出

1 1

10 2

20 2

30 1

而是输出

1 0

10 0

20 0

30 0

最佳答案

问题是

if(num[a])

如果 a 不存在,则在 num 中构造一个键值对。当你尝试做的时候

num.insert(make_pair(a,1));

之后你就不能了,因为现在 map 中已经有一个键为 a 的元素。好消息是这是一个非常简单的修复。将循环更改为

for (int i = 0;i < n; i++){
    cin>>a;
    num[a]++;
}

将做正确的事情,因为如果 a 不存在,您将获得一个初始化为零的值,然后将其递增为 1。如果您点击一个您已经创建的键,那么您只需将其值增加一个。

关于c++ - 为什么不能在 STL 映射中插入值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57115154/

相关文章:

c++ - BB 10 解析后导航页面

c++ - 访问类的 std::string 时崩溃

c++ - 带有 Boost 的 Node-gyp 包含和库目录

c++ - 在 CUDA 中,如何将设备内存分配给我的指针数组?

c++ - 使用字符串作为指向其第一个字符的指针

c++ - 字符串无法识别? C4430 : missing type specifier - int assumed

c++ - Xcode 4.5 和 OpenMP with Clang (Apple LLVM) 仅使用一个内核

c++ - CRTP 模式不会触发完整模板实例化

c++ - 输入错误时,while 循环会无限循环

c++ - C++ 中的双数值积分