从C ++中的值中删除键,值

时间:2016-04-11 06:58:58

标签: c++ dictionary iterator erase

我的地图定义如下:

map<string, map<string, string>> _map;

但是出现的问题是我的地图首先是大致相同的值,即

_map["key1"]["value1"] = "data1";
_map["key1"]["value2"] = "data2";
_map["key1"]["value3"] = "data3";
_map["key1"]["value4"] = "data4";
_map["key2"]["value5"] = "data5";

因此,当我想删除任何特定的(键,值)时, 我不能将_map.find(“key1”)用于迭代器,因为它有重复的条目

有没有办法使用值设置迭代器索引?

假设我要删除此条目:

_map["key1"]["value4"] = "data4";

我该怎么做?

2 个答案:

答案 0 :(得分:3)

只需erase

 _map["key1"].erase("value4");

请注意,如果密钥不存在,它不会抛出异常 - 在这种情况下它会返回0。

顺便说一句,你可以改进地图的初始化:

std::map<std::string, std::map<std::string, std::string>> _map 
{
   {"key1", {
               {"value1", "data1"},
               {"value2", "data2"},
               {"value3", "data3"},
               {"value4", "data4"}
             }
    },
    {"key2", {
                {"value5", "data5"}
             }
     }
 };

答案 1 :(得分:2)

Nawaz的回答是正确的。但它有一个缺点:如果您删除"value5"_map["key2"]仍会包含空map<string, string>。这可能不是你想要的。

要解决此问题,您可以使用pair模板并将_map的类型更改为:

map<pair<string, string>, string> _map;

您的作业将如下所示:

_map[make_pair("key1", "value1")] = "data1";
_map[make_pair("key1", "value2")] = "data2";
_map[make_pair("key1", "value3")] = "data3";
_map[make_pair("key1", "value4")] = "data4";
_map[make_pair("key2", "value5")] = "data5";

然后您可以删除每个条目,如:

_map.erase(make_pair("key1", "value4"));

您可以在<utility>标题中找到pair类型。