我在映射中插入键值,但无论我在第 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/