在c++中映射,key作为字符串,int作为值

maps in c++ with key as string and int as value

本文关键字:int 字符串 key c++ 映射      更新时间:2023-10-16

每当我接受一个输入时,输出的第一个元素键都为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。然后,它将期望阅读后面的许多行。

当然,这里的主要问题是只有一条线,而不是两条线。

从那一刻起,事情就开始走下坡路。一旦你理解了这个问题,你就应该能够自己弄清楚为什么这会导致你看到的输出,以及你需要做些什么来解决它:要么改变输入以指示后面只有一行,要么相应地调整输入读取循环。