¿Por qué STL unordered_map y unordered_set no se pueden ordenar por algoritmos STL?
Comenzaré ilustrando un ejemplo de caso de uso simple:
Considere el problema de una base de datos de ID de seguridad social, donde el código C ++ se modela como unstd::unordered_map
donde su clave es la identificación de seguridad social de una persona y su valor es unstd::string
con el nombre completo de esa persona (por ejemplo,std::unordered_map<int, std::string> DB;
)
Considere también que hay una solicitud para imprimir esta base de datos ordenada en orden ascendente según la identificación de la persona (es decir,std::unordered_map
La clave).
Ingenuamente, uno pensaría usarstd::sort
para ordenar elstd::unordered_map
de acuerdo con los criterios solicitados y luego imprímalo, como el código de ejemplo a continuación:
std::sort(DB.begin(), DB.end());
for(auto p : DB) std::cout << "ID(" << p.first
<< ") - "
<< p.second
<< std::endl;
Sin embargo, este no es el caso, porque el uso destd::sort
con un rango de cualquierastd::unordered_map
o unstd::unordered_set
generará un error del compilador.Preguntas:Por qué los contenedores desordenados de STL no se pueden ordenar porstd::sort
?¿Existe una forma legítima y eficiente de clasificar unstd::unordered_map
o unstd::unordered_set
?