4

考虑以下代码:

std::map <string,string> myMap;
myMap.insert(std::make_pair("first_key" , "no_value" ));
myMap.insert(std::make_pair("first_key" , "first_value" ));
myMap.insert(std::make_pair("second_key" , "second_value" ));

typedef map<string, string>::const_iterator MapIterator;
for (MapIterator iter = myMap.begin(); iter != myMap.end(); iter++)
{
    cout << "Key: " << iter->first << endl << "Values:" << iter->second << endl;
}

输出是:

Key: first_key
Values:no_value
Key: second_key
Values:second_value

意思是第二个任务:

myMap.insert(std::make_pair("first_key" , "first_value" ));

没有发生。

仅当密钥尚未列出并且已列出时,我如何才能配对 - 更改其值?

有 std::map 的通用方法吗?

4

4 回答 4

5

如果找到键,则使用operator [],或使用find并更改值。将在映射中插入对,如果没有这样的键和更新值,如果键存在。

myMap["first_key"] = "first_value";

或这个:

auto pos = myMap.find("first_key");
if (pos != myMap.end())
{
   pos->second = "first_value";
}
else
{
   // insert here.
}
于 2012-12-25T11:26:46.367 回答
4

插入前添加条件

if (myMap.find("first_key") == myMap.end()) {
  myMap.insert(std::make_pair("first_key" , "first_value" ));
}
else {
  myMap["first_key"] = "first_value";
}
于 2012-12-25T11:26:37.533 回答
4

当值存在时避免第二次搜索地图更有效:

const iterator i = myMap.find("first_key");
if (i == myMap.end()) {
    myMap.insert(std::make_pair("first_key" , "first_value"));
} else {
    i->second = "first_value";
}
于 2015-10-23T21:23:51.640 回答
0
    #include <map>
//use of make_pair using map container

std::map< std::string, std::map<std::string, float> > student;
        std::map<std::string, float> data;
           data.insert(make_pair("rollno", 11));
        data.insert(make_pair("Physics", 55));
        data.insert(make_pair("Chemistry", 80));
        data.insert(make_pair("Math", 65));
        student.insert(make_pair("Milind Morey", data));
       
        data.insert(make_pair("rollno", 12));
        data.insert(make_pair("Physics", 40));
        data.insert(make_pair("Chemistry", 90));
        data.insert(make_pair("Math", 77));
        student.insert(make_pair("pankaj B", data));
       
        data.insert(make_pair("rollno", 12));
        data.insert(make_pair("Physics", 84));
        data.insert(make_pair("Chemistry", 59));
        data.insert(make_pair("Math", 76));
        student.insert(make_pair("Sachin D", data));
       
        for (auto s : student)
        {
            std::map<std::string, float> rmrk = s.second;
            cout <<endl<< s.first<<"   ";
            for (auto stddetails : s.second)
            {
                cout <<"   "<< stddetails.first << "   " << stddetails.second;
            }
        }
于 2021-09-07T07:55:15.920 回答