为什么不能在STL映射中插入值
why can not insert value in STL map?
>我在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。
相关文章:
- 在未初始化映射的情况下,将值插入到映射的映射中
- 如果我将嵌套映射作为多重映射的值,如何将值插入内部映射?
- 将包含不可复制对象的对插入到映射中
- 在映射中插入一对时,C++是否需要额外的代码
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- 在 c++ 中使用带有映射的插入效率
- 如何编写用于多映射插入和擦除功能的 API?
- 如何将元素插入和迭代到这种映射.C++
- 将数组的元素插入映射的时间复杂度是多少?
- 在映射中插入配对键
- 如何将整数向量插入到键中,标准::映射的值
- 将唯一指针插入std::映射
- 如何将带指针的结构插入到映射中
- std::映射导致插入时出现C2664错误
- 在共享内存中插入映射映射时出现编译器错误
- 将元素插入 c++ 映射 - 插入方法的差异
- C 将HEAP对象插入std ::用insert()插入映射,而另一个则存在删除新的对象
- 插入映射<字符串,结构>错误
- 在公共方法中插入映射(私有属性)后出现分割故障
- 通过移动mapped_type的 r 值插入映射条目