Ответ
Нет. std::unordered_map — это хэш-таблица, и порядок её элементов не гарантируется. Он зависит от хэш-функции, внутренней структуры бакетов (корзин) и может меняться при рехэшировании (например, при увеличении размера контейнера).
Пример:
#include <iostream>
#include <unordered_map>
#include <string>
int main() {
std::unordered_map<int, std::string> map;
// Вставка в порядке возрастания ключа
map.insert({3, "three"});
map.insert({1, "one"});
map.insert({4, "four"});
map.insert({2, "two"});
std::cout << "Iteration order:n";
for (const auto& [key, value] : map) {
std::cout << key << ": " << value << 'n';
}
// Вывод может быть, например: 2: two, 4: four, 1: one, 3: three
// Порядок не соответствует ни порядку добавления, ни сортировке по ключу.
}
Альтернативы, если порядок важен:
std::map— хранит элементы, отсортированные по ключу (логарифмический доступ).std::vector<std::pair<Key, Value>>— сохраняет порядок вставки, но поиск линейный.- Комбинация структур — например,
std::unordered_map<Key, Value>для быстрого поиска +std::vector<Key>для сохранения порядка.