gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 15:56:18 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com