Jestem świadomy, że mapa nie jest przygotowana do sortowania, jest mocno zoptymalizowana pod kątem szybkiego i losowego dostępu do klucza., A tak naprawdę nie obsługuje std :: sort.Sortowanie std :: map według wartości przed wyjściem i zniszczeniem
Mój obecny problem jest, że mam pełną
map<std::string,int>
których nie będę już używać, po prostu trzeba wyodrębnić 10 par wartości (int) zamówienia i zniszczyć go.
Najlepszą rzeczą, gdyby to było możliwe, byłoby posortowanie go na miejscu, a następnie powtórzenie go 10 razy, ale to najwyraźniej nie jest rozwiązaniem.
Próbuję różnych rozwiązań jako przechodzenie przez multimap (aby umożliwić zduplikowanie kluczy), ale chciałbym wiedzieć, czy istnieje bardziej eleganckie rozwiązanie, używając algorytmów stl w takim stopniu, jak to możliwe.
EDIT:
używam mapę bo dla 99% czasu muszę go jako mapa, fast kluczowych wyszukiwań w celu zwiększenia wartości. Potrzebuję tylko dobrego sposobu późniejszego wyodrębniania w porządku wartości, kiedy nie potrzebuję już mapy.
Aktualne podejście whould być:
- std :: kopiować mapy (std :: string, int) do wektora (para (std :: string, int))
- rodzaj wektor
- dostać pierwsze 10 wartości
- niszczą wektor i mapa
Twoje wymagania są dla mnie bardzo niejasne. IIUC, musisz znaleźć 10 wpisów na mapie _ przez ich wartość_ zamiast ich klucza? A kiedy już je masz, co zamierzasz z nimi zrobić? Pytam, ponieważ "niszczenie" jest niejasnym terminem i nie mogę odgadnąć znaczenia dla 'std :: pair'. Czy mają zostać usunięte z mapy? (Prawdopodobnie nie, ponieważ powiedziałeś, że już nie potrzebujesz mapy, ale co jeszcze?) –
sbi
Mapa zostanie zniszczona, więc nie obchodzi mnie, co stanie się z nią później, wystarczy mieć te 10 wartości: –