Classificando um std :: map pelo valor antes de output & destroy
Estou ciente de que o mapa não está preparado para ser classificado. É altamente otimizado para acesso rápido e aleatório a chaves e, na verdade, não suportastd::sort
.
Meu problema atual é que eu tenho um completomap<std::string,int>
que eu não vou mais usar. Eu só preciso extrair 10 pares emvalue(int)
ordenar e destruí-lo.
A melhor coisa, se fosse possível, seria classificá-lo no lugar e depois iterar 10 vezes, mas isso aparentemente não é uma solução.
Estou tentando soluções diferentes como passar por ummultimap<int,string>
(para permitir chaves duplicadas), mas eu gostaria de saber se existe uma solução mais elegante, usando algoritmos stl tanto quanto possível.
EDITAR:
Estou usando um mapa porque, para 99% do tempo, preciso dele como um mapa: pesquisas de chave rápida para aumentar os valores. Só preciso de uma boa maneira de extrair mais tarde a ordem de valor quando não preciso mais do mapa.
A abordagem atual deveria ser:
std::copy
amap(std::string,int)
para umvector(pair(std::string,int))
ordenar o vetorobter os primeiros 10 valoresdestruir vetor e mapa