У меня есть следующий код для перебора всех ключей в unordered_map, в то время как при переборе я передаю карту какой-то другой функции.По какой-то причине итератор не может перебирать все ключи.Я не могу понять, почему и как это исправить.Если я передаю карту как значение вместо ссылки, тогда она работает как ожидалось, но я хочу передать по ссылке, чтобы сохранить копию.
Код:
void DFS(char curr, unordered_map<char, unordered_set<char>>& G) {
cout << "Traversing: " << curr << endl;
for(const char& ch: G[curr]) {
DFS(ch, G);
}
}
int main() {
unordered_map<char, unordered_set<char>> G;
G['c'].emplace('b');
G['b'].emplace('a');
for(auto it : G) {
cout << "Starting with: " << it.first << endl;
DFS(it.first, G);
}
}
Вывод, который я получаю::
Starting with: b
Traversing: b
Traversing: a
Обратите внимание, что это не обходной ключ c
.
ОБНОВЛЕНИЕ: Изменение функции DFS для обеспечения соответствия карты, как показано ниже, также не помогает:
void DFS(const char curr, const unordered_map<char, unordered_set<char>>& G) {
cout << "Traversing: " << curr << endl;
for(auto ch: G.at(curr)) {
DFS(ch, G);
}
}
И это тоже исключение:
terminate called after throwing an instance of 'std::out_of_range'
what(): _Map_base::at