如何快速排除一个map中value为空或者null
时间: 2023-12-14 12:36:10 浏览: 107
Java实现过滤掉map集合中key或value为空的值示例
可以使用`std::map`的`erase`和`std::remove_if`函数来删除这些key-value对。具体步骤如下:
1. 定义一个谓词函数,该函数接受一个`std::pair`类型的参数,并检查其`second`值是否为空或null。
```c++
bool is_value_null(const std::pair<int, std::string>& p) {
return p.second.empty();
}
```
2. 使用`std::remove_if`函数将满足谓词函数条件的key-value对移动到map的末尾,并返回一个指向最后一个未被移动元素的迭代器。
```c++
auto it = std::remove_if(my_map.begin(), my_map.end(), is_value_null);
```
3. 使用`std::map`的`erase`函数删除从上一步中获取的迭代器到map末尾的所有元素。
```c++
my_map.erase(it, my_map.end());
```
完整代码如下:
```c++
#include <iostream>
#include <map>
#include <algorithm>
bool is_value_null(const std::pair<int, std::string>& p) {
return p.second.empty();
}
int main() {
std::map<int, std::string> my_map = {{1, "foo"}, {2, ""}, {3, "bar"}, {4, nullptr}, {5, "baz"}};
auto it = std::remove_if(my_map.begin(), my_map.end(), is_value_null);
my_map.erase(it, my_map.end());
for (const auto& p : my_map) {
std::cout << p.first << ": " << p.second << std::endl;
}
return 0;
}
```
阅读全文