用 C++20 的给定键读取/写入 std::multimap 的所有值?

Read/write all values of a std::multimap with a given key in C++20?

本文关键字:multimap std C++20 读取 写入      更新时间:2023-10-16

假设我有一些函数:

void mutate(V& v);

读取/写入v- 我想写一个函数:

void mutate_map_values(std::multimap<K,V>& m, K k);

mutate适用于具有键k的所有m值。

在 C++20 中实现mutate_map_values的最简洁方法是什么?

std::ranges::subrange是一个实用程序类,可以从任何类似于一对迭代器的东西构造。这符合std::multimap::equal_range已经返回的内容。结合两者,我们可以在 C++20 中编写如下所需的函数:

#include <ranges>
void mutate_map_values(std::multimap<K,V>& m, K k) {
using namespace std::ranges;
for (auto& [_, v] : subrange(m.equal_range(k))) {
mutate(v);
}
}