Por que STL unordered_map e unordered_set não podem ser classificados pelos algoritmos STL?

Começarei ilustrando um exemplo simples de caso de uso:

Considere o problema de um banco de dados de ID de seguridade social, no qual o código C ++ é modelado como umstd::unordered_map onde sua chave é o ID de seguridade social de uma pessoa e seu valor é umstd::string com o nome completo dessa pessoa (por exemplo,std::unordered_map<int, std::string> DB;)

Considere também que há uma solicitação para imprimir esse banco de dados classificado em ordem crescente com base no ID da pessoa (ou seja,std::unordered_mapchave do

Ingenuamente, alguém poderia pensar em usarstd::sort para classificar ostd::unordered_map de acordo com os critérios solicitados e imprima-o, como no código de exemplo abaixo:

   std::sort(DB.begin(), DB.end());
   for(auto p : DB) std::cout << "ID(" << p.first
                              << ") - " 
                              << p.second 
                              << std::endl;
No entanto, esse não é o caso, porque o uso destd::sort com um intervalo destd::unordered_map ou umstd::unordered_set irá gerar um erro do compilador.Questões:Por que os contêineres não ordenados da STL não podem ser classificados porstd::sort?Existe uma maneira legítima e eficiente de classificar umstd::unordered_map ou umstd::unordered_set?

questionAnswers(0)

yourAnswerToTheQuestion