我的地图定义如下:
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";
我该怎么做?
答案 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类型。