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 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: 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!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> &p) const {
auto h1 = std::hash<T1>{}(p.first);
auto h2 = std::hash<T2>{}(p.second);
return h1 ^ h2;
}
};
using Vote = std::pair<std::string, std::string>;
using Unordered_map = std::unordered_map<Vote, int, pair_hash>;