我是C ++的新手,并对为什么这行代码不起作用感到困惑。
if(choice == 1){
if(mp[name] == 0){
mp.insert(make_pair(name, marks));
cout << 1;
}
下面列出了整个程序。
#include <bits/stdc++.h>
using namespace std;
int main()
{
// initialize container
map<string, int> mp, mp1;
int choice, marks;
string name;
cin >> choice;
cin >> name;
cin >> marks;
if(choice == 1){
if(mp[name] == 0){
mp.insert(make_pair(name, marks));
cout << 1;
} else {
mp[name] += marks;
}
}
mp1.insert(mp.begin(), mp.end());
for(auto itr = mp1.begin(); itr != mp1.end(); ++itr){
cout << itr->first << '\t' << itr->second << '\n';
}
cout << mp1[name];
return 0;
}
错误似乎在double if语句中。运行代码时,由于打印了1,因此将执行if语句。但是,insert命令不会执行。如果我消除了if语句,则insert命令似乎可以正常工作。我一直在寻找答案,无济于事。我是C ++和StackOverflow的新手,所以将不胜感激。
答案 0 :(得分:0)
您的代码有两个问题:
map<string, int> mp, mp1;
您声明了地图,但从未初始化过地图的值,请记住,这是C ++,也没有默认的初始化器,
if(mp[name] == 0){
mp.insert(make_pair(name, marks));
cout << 1;
}
像99.99%的时间一样不会运行。...除非您超级幸运,并且未定义的行为将值初始化为0。
答案 1 :(得分:0)
由于您的问题已在评论中告知,建议您使用std::map::find
#include <iostream>
#include <map>
int main()
{
std::map<std::string, int> mp;
mp["ex"] = 0;
auto it = mp.find("ex");
if(it != mp.end())
{
it->second = 1;
}
std::cout << mp["ex"]; // Outputs 1
}
这将搜索对中第一个值为“ ex”的迭代器,检查其是否不等于最后一个迭代器(如果未找到此类迭代器,则为默认值),初始化该对中的第二个值为1,然后输出。
有关std::map::find
visit this