为什么不能在STL映射中插入值

why can not insert value in STL map?

本文关键字:插入 映射 STL 不能 为什么      更新时间:2023-10-16

>我在map中插入键,值,但是无论我更改第14行中的值,该值始终等于零,第13行"if"语句从未执行过。这是代码,编译器是 Ubuntu 7.4.0 中的 GCC 18.04

#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));

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

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

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