我想根据某些条件从地图中删除若干元素:
#include <unordered_map>
#include <ranges>
#include <iostream>
int main() {
std::unordered_map<int, int> numbers = {{1,2}, {2,1}, {3,2}, {4,5}};
auto even = [](auto entry){return entry.second %2 == 0;};
for(auto& [key, val] : numbers | std::views::filter(even)) {
numbers.erase(val);
}
for(auto& [key, val] : numbers) {
std::cout << key << " " << val << "\n";
}
}
但是似乎我正在使范围循环需要的迭代器无效:
4 5
3 2
1 2
我知道可以使用迭代器来明确地完成这个操作,但是否有一种漂亮而简洁的基于范围的方法来根据过滤器删除元素呢?