Heim >Backend-Entwicklung >C++ >Wie verwende ich Paare als Schlüssel in ungeordneten Karten in C?

Wie verwende ich Paare als Schlüssel in ungeordneten Karten in C?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-09 07:17:07719Durchsuche

How to Use Pairs as Keys in Unordered Maps in C  ?

Verwenden von Paaren als Schlüssel in ungeordneten Karten

Beim Versuch, eine ungeordnete_Karte zu deklarieren, bei der die Schlüssel Paare sind (Vote = pair

Implicit instantiation of undefined template 'std::__1::hash, std::__1::basic_string > >'</p>
<p>Dieser Fehler tritt auf, weil unordered_map basiert auf einer Hash-Funktion, die auf seinen Schlüsseltyp zugeschnitten ist. Da die Standard-Hash-Funktion nicht auf Paare anwendbar ist, müssen Sie eine benutzerdefinierte Hash-Funktion bereitstellen.</p>
<p>Betrachten Sie beispielsweise die folgende benutzerdefinierte Hash-Funktion (pair_hash):</p>
<pre class="brush:php;toolbar:false">struct pair_hash {
    template <class T1, class T2>
    std::size_t operator() (const std::pair<T1, T2> &amp;p) const {
        auto h1 = std::hash<T1>{}(p.first);
        auto h2 = std::hash<T2>{}(p.second);
        return h1 ^ h2;
    }
};

Diese Hash-Funktion kombiniert die Hashwerte der Komponenten des Paars mithilfe des XOR-Operators. Um es zu verwenden, ändern Sie die unordered_map-Deklaration wie folgt:

using Vote = std::pair<std::string, std::string>;
using Unordered_map = std::unordered_map<Vote, int, pair_hash>;

Dieser Ansatz ermöglicht die Erstellung ungeordneter Karten mit Paaren als Schlüssel, indem eine geeignete Hash-Funktion bereitgestellt wird. Es ist jedoch zu beachten, dass diese vereinfachte Implementierung möglicherweise keine optimalen Hash-Eigenschaften aufweist. Erwägen Sie daher, die hash_combine-Funktion von Boost auszuprobieren oder hash_value festzulegen, um bessere Ergebnisse zu erzielen.

Das obige ist der detaillierte Inhalt vonWie verwende ich Paare als Schlüssel in ungeordneten Karten in C?. 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