插入函数不适用于2 if语句C ++

时间:2020-07-12 18:15:31

标签: c++

我是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的新手,所以将不胜感激。

2 个答案:

答案 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

的更多信息