如何删除map中value类型为vector的部分值
时间: 2023-08-08 22:02:16 浏览: 127
C++中vector可以作为map的键值实例代码
要删除Map中存储的value类型为vector的部分值,可以按照以下步骤进行操作:
1. 遍历Map,逐个检查每个键值对。
2. 对于value类型为vector的键值对,获取对应的vector对象。
3. 根据删除条件,使用erase-remove_if函数删除vector中符合条件的元素。
4. 如果删除后的vector为空,可以选择删除整个键值对,或者将对应的value设置为NULL。
5. 如果删除后的vector不为空,将更新后的vector重新存储回原Map的对应键值对中。
以下是一个示例的代码实现:
```
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
int main() {
std::map<int, std::vector<int>> myMap; // 创建一个Map对象
// 向Map中添加键值对
myMap[1] = {1, 2, 3};
myMap[2] = {4, 5, 6};
myMap[3] = {7, 8, 9};
// 遍历Map,删除value类型为vector中值为1的元素
for (auto it = myMap.begin(); it != myMap.end(); ++it) {
// 检查value类型是否为vector
if (typeid(it->second) == typeid(std::vector<int>)) {
std::vector<int>& vec = it->second; // 获取对应的vector对象
// 删除满足条件的元素
vec.erase(std::remove_if(vec.begin(), vec.end(), [](int x) { return x == 1; }), vec.end());
// 如果删除后的vector为空,可以选择删除整个键值对
if (vec.empty()) {
myMap.erase(it++);
}
}
}
// 输出更新后的Map内容
for (const auto& pair : myMap) {
std::cout << pair.first << ":";
for (const auto& element : pair.second) {
std::cout << " " << element;
}
std::cout << std::endl;
}
return 0;
}
```
在上述示例中,我们遍历了Map对象,并通过typeid检查value的类型是否为vector。然后用erase-remove_if的组合来删除vector中符合特定条件的元素。最后,我们根据需要可以选择删除整个键值对或将对应的value设置为NULL。最后,我们输出更新后的Map内容,以检查删除结果。
阅读全文