Heim >Backend-Entwicklung >C++ >Wie kann ich eine std::map nach Wert in C sortieren?

Wie kann ich eine std::map nach Wert in C sortieren?

DDD
DDDOriginal
2024-11-30 19:01:121002Durchsuche

How Can I Sort an std::map by Value in C  ?

Sortieren einer std::map nach Wert

Frage: Wie kann ich eine std::map mühelos nach ihrem Wert sortieren? Werte?

Antwort:

Traditioneller Ansatz (vor C 11)

Vor der Einführung von C 11, Das Sortieren einer Karte nach Werten erforderte einen Zwischenschritt der Konvertierung der std::map in ein std::pair. Dies beinhaltete die Verwendung einer benutzerdefinierten Sortierfunktion und die manuelle Angabe der Vergleichsparameter.

C 11-Ansatz

Mit der Einführung von C 11 entstand eine sauberere Lösung. Das folgende Code-Snippet zeigt, wie:

template<typename A, typename B>
std::multimap<B,A> flip_map(const std::map<A,B> &src)
{
    std::multimap<B,A> dst;
    std::transform(src.begin(), src.end(), std::inserter(dst, dst.begin()),
                   flip_pair<A,B>);
    return dst;
}

Diese Funktion dreht die Schlüssel-Wert-Paare innerhalb der Karte effektiv um, sodass Sie über die sortierten Werte iterieren können.

Generische assoziative Quelle (C 11 und höher)

Für mehr Flexibilität kann eine generische Version der Spiegelfunktion verwendet werden erstellt, sodass sie mit jedem assoziativen Container funktionieren kann:

template<typename A, typename B, template<class,class,class...> class M, class... Args>
std::multimap<B,A> flip_map(const M<A,B,Args...> &src)
{
    std::multimap<B,A> dst;
    std::transform(src.begin(), src.end(),
                   std::inserter(dst, dst.begin()),
                   flip_pair<A,B>);
    return dst;
}

Diese Funktion akzeptiert jede assoziative Containerklasse als Eingabe, sodass sie bequem sowohl mit std::map als auch mit std::unordered_map verwendet werden kann.

Das obige ist der detaillierte Inhalt vonWie kann ich eine std::map nach Wert in C sortieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn