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_map
chave 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
?