在 C++ 中按值从映射中擦除键、值
Erase key, value from map by value in C++
我的地图是这样定义的:
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";
我该怎么做?
只是erase
它:
_map["key1"].erase("value4");
请注意,如果密钥不存在,它不会抛出异常 - 在这种情况下它 returns 0。
顺便说一句,您可以将地图的初始化改进为:
std::map<std::string, std::map<std::string, std::string>> _map
{
{"key1", {
{"value1", "data1"},
{"value2", "data2"},
{"value3", "data3"},
{"value4", "data4"}
}
},
{"key2", {
{"value5", "data5"}
}
}
};
纳瓦兹的回答是正确的。然而,它确实有一个弱点:如果您擦除 "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>
header 中找到 pair 类型。
我的地图是这样定义的:
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";
我该怎么做?
只是erase
它:
_map["key1"].erase("value4");
请注意,如果密钥不存在,它不会抛出异常 - 在这种情况下它 returns 0。
顺便说一句,您可以将地图的初始化改进为:
std::map<std::string, std::map<std::string, std::string>> _map
{
{"key1", {
{"value1", "data1"},
{"value2", "data2"},
{"value3", "data3"},
{"value4", "data4"}
}
},
{"key2", {
{"value5", "data5"}
}
}
};
纳瓦兹的回答是正确的。然而,它确实有一个弱点:如果您擦除 "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>
header 中找到 pair 类型。