Ваша настоящая проблема в том, что вы не знаете, как использовать std::unordered_map
независимо от вашего варианта использования.
Первое, что вы должны были сделать, это прочитать связанную документацию о std::unordered_map
. Это дало бы вам ответ на все ваши вопросы.
Как добавить эти значения на карту?
У вас есть несколько (C ++) 14) способы сделать это:
std::unordered_map::insert()
std::unordered_map::emplace()
std::unordered_map::operator[]()
Примечание: Эти функции не совпадают . Вы должны прочитать документацию о деталях каждой функции (что она делает и как ее использовать).
Как получить к ней доступ?
Вы можете получить доступ к элементам, используя:
std::unordered_map::operator[]()
( примечание: Вставит элемент, если он не существует) std::unordered_map::at()
( примечание: сгенерирует исключение std::out_of_range
, если оно не существует)
Но я не знаю, как получить к нему доступ и пройти его.
Если вы хотите пройти его, самый простой способ - использовать диапазон для l oop.
Пример:
int main()
{
using ValueType = std::vector<std::pair<int, int>>;
// Create the map
std::unordered_map<long long, ValueType> umap;
// Fill the map
umap.emplace(std::make_pair<long long, ValueType>(5, {{1, 3}, {2, 5}, {5, 4}}));
umap.emplace(std::make_pair<long long, ValueType>(89998, {{6, 899}, {8, 8887}, {9999, 556}}));
// Iterate over the map
for(const std::pair<long long, ValueType> & element : umap)
{
std::cout << element.first << " -> " << '[';
for(const std::pair<int, int> & couple : element.second)
std::cout << '(' << couple.first << ", " << couple.second << ')';
std::cout << "]\n";
}
return 0;
}
Вывод:
89998 -> [(6, 899)(8, 8887)(9999, 556)]
5 -> [(1, 3)(2, 5)(5, 4)]
Живой пример (C ++ 14)