Мне нужно выполнить некоторый код для всех значений ключа, и мне нужно повторить это действие для каждого ключа.Я ищу что-то вроде:
for(auto key_iterator = hash_multimap.begin_keys();
key_iterator != hash_multimap.end_keys(); key_iterator++)
{
auto key = key_iterator->key;
// set up state
for(auto value_iterator = key_iterator->begin_values();
value_iterator != key_iterator->end_values(); value_iterator++)
{
// mutate state
}
// use state
// tear down state
}
Это, конечно, не работает, но есть ли способ добиться подобного эффекта?проблема в том, что мне нужно пройти через каждый ключ, а затем использовать общее состояние для всех них.Пример того, для чего он может быть использован:
typedef std::hash_multimap<int> hash_t;
typedef hash_t::value_type hash_val;
hash_t hash;
hash.insert(hash_val(0, 1));
hash.insert(hash_val(1, 2));
hash.insert(hash_val(1, 3));
hash.insert(hash_val(2, 4));
hash.insert(hash_val(2, 5));
hash.insert(hash_val(2, 6));
hash.insert(hash_val(3, 7));
hash.insert(hash_val(3, 8));
hash.insert(hash_val(3, 9));
// print out the sum of values for each key here.
// expected output:
//
// 0: 1
// 1: 5
// 2: 15
// 3: 24
Проблема с использованием hash_multimap.begin()
заключается в том, что я не могу быть уверен, что он возвращает каждый ключ в последовательном блоке этого ключа, и дажеесли это произойдет, я не могу знать, где такой блок начинается и где он заканчивается.
Редактировать: я также не могу использовать hash_multimap.equal_range(key)
, потому что я не могу перебирать ключи.способ перебора ключей, включающий каждый ключ только один раз, также решит эту проблему.
Как я могу это сделать?