Чтение / запись всех значений std :: multimap с данным ключом в C ++ 20? - PullRequest
2 голосов
/ 09 января 2020

Предположим, у меня есть какая-то функция:

void mutate(V& v);

, которая читает / пишет v - и я хочу написать функцию:

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

, которая применяет mutate ко всем значения m, имеющие ключ k.

Какой самый краткий способ реализовать mutate_map_values в C ++ 20?

1 Ответ

5 голосов
/ 09 января 2020

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);
    }
}
...