Почему STL unordered_map и unordered_set не могут быть отсортированы алгоритмами STL?
Я начну с иллюстрации простого примера использования:
Рассмотрим проблему базы данных идентификаторов социального обеспечения, где в C ++ код моделируется какstd::unordered_map
где его ключ - идентификатор социального обеспечения человека, а его ценность -std::string
с полным именем этого лица (например,std::unordered_map<int, std::string> DB;
).
Также учтите, что существует запрос на печать этой базы данных, отсортированный в порядке возрастания на основе идентификатора человека (т.е.std::unordered_map
ключ).
Наивно, можно подумать, использоватьstd::sort
для того, чтобы отсортироватьstd::unordered_map
в соответствии с запрошенными критериями, а затем распечатайте его, как в примере кода ниже:
std::sort(DB.begin(), DB.end());
for(auto p : DB) std::cout << "ID(" << p.first
<< ") - "
<< p.second
<< std::endl;
Однако это не так, потому что использованиеstd::sort
с диапазоном либоstd::unordered_map
илиstd::unordered_set
вызовет ошибку компилятора.Вопросы:Почему неупорядоченные контейнеры STL не могут быть отсортированы поstd::sort
?Существует ли законный и эффективный способ сортировкиstd::unordered_map
илиstd::unordered_set
?