在c++中映射,key作为字符串,int作为值
maps in c++ with key as string and int as value
每当我接受一个输入时,输出的第一个元素键都为null。为什么会这样?
例如:-
输入:-
2
mayank (now it shows output directly)
输出:-
=> 1
mayank => 1
2
=====================
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
string str;
map<string, int> vote;
cin>>n;
for(int i=0;i<n;i++)
{
getline(cin,str);
vote.insert(pair<string, int>(str,vote[str]++));
}
for(map<string, int>::iterator it=vote.begin();it!=vote.end();it++)
{
cout<<it->first<<" => "<<it->second<<endl;
}
cout<<vote.size()<<endl;
return 0;
}
vote.insert(pair<string, int>(str,vote[str]++));
这其中的大部分都毫无作用。
vote[str]
如果键不存在,这将对映射中的值进行值初始化。因此,在这一点上,你得到了100%的保证(或退款(,str
作为密钥存在于地图中。
然后,构造一个新的std::pair
,然后尝试将这个法兰克福空运到地图中的insert()
是一个保证的失败。无论你多么努力,都不会插入任何东西,因为在这一点上,密钥已经保证存在于地图中。
整个混合物应该简单地替换为:
++vote[str];
就是这样。现在,面对眼前的问题:
2
mayank
根据该代码的输入读取部分的逻辑,它将读取行数,即2。然后,它将期望阅读后面的许多行。
当然,这里的主要问题是只有一条线,而不是两条线。
从那一刻起,事情就开始走下坡路。一旦你理解了这个问题,你就应该能够自己弄清楚为什么这会导致你看到的输出,以及你需要做些什么来解决它:要么改变输入以指示后面只有一行,要么相应地调整输入读取循环。
相关文章:
- 我如何获取从 C++ 到 C 的映射<字符串、int>#
- 构造<int>具有 2 个字符串文字的向量
- 字符串中int的加法运算
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- cin >> int 给定一个字符串将 int 赋值为 0
- 将字符串中的 int 转换为字母;
- 使用 switch,但我想用字符串而不是 int 进行选择
- 两个数组,int 和 string,如何显示带有对应 int 的字符串?
- 从字符串流中读取具有特定字段宽度的 int
- win 表单应用程序字符串^ 到 int
- C++程序在将 int 与 cin 一起使用时有效,但不能使用字符串
- 将子字符串字符从字符串值转换为 int,然后将其分配给 int 变量
- 将字符串转换为 int 后的随机值
- 如何检查字符串是否正确以将其转换为 int?
- 在乌鸦中获取非Int(字符串)URL资源ID
- 如何使 int 字符串中的每个输入都成为一位数
- 将无符号int+字符串强制转换为无符号char向量
- 如何在C++中连接字符串+int+字符串
- 如何在消息框中使用int字符串?
- 如何在C++中将向量转换为<int>字符串