Wie mache ich ungeordnete Menge von Paaren von ganzen Zahlen in C ++?
Wird das Programm nicht kompilieren eine ungeordnete Menge von Paaren von ganzen zahlen, aber es funktioniert für ganze zahlen. Kann unordered_set und Ihre member-Funktionen verwendet werden, die auf Benutzer-definierte Typen, und wie kann ich es definieren?
#include <unordered_set>
...
class A{
...
private:
std::unordered_set< std::pair<int, int> > u_edge_;
};
error: no matching function for call to 'std::unordered_set<std::pair<unsigned int, unsigned int> >::unordered_set()'
InformationsquelleAutor der Frage Pippi | 2013-03-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihren code kompiliert auf VS2010 SP1 (VC10), aber es versäumt, zu kompilieren mit GCC-g++ 4.7.2.
Allerdings möchten Sie vielleicht zu prüfen
boost::hash
aus Boost.Funktionale hash einstd::pair
(mit diesem Zusatz-code, kompiliert auch mit g++).InformationsquelleAutor der Antwort Mr.C64
Es gibt keine standard-Weg, der die Berechnung eines hash auf ein paar. Fügen Sie diese definition mit Ihrer Datei:
Nun können Sie es wie folgt:
Dies funktioniert, weil
pair<T1,T2>
definiert Gleichheit. Für benutzerdefinierte Klassen, die nicht bieten eine Methode zum testen der Gleichheit, die Sie möglicherweise benötigen, um eine separate Funktion, um zu testen, ob zwei Instanzen gleich sind, um einander.Natürlich ist diese Lösung beschränkt sich auf ein paar von zwei zahlen. Hier ist ein link zu einer Antwortdie Ihnen hilft, zu definieren, eine mehr Allgemeine Weise des Verdienens des hash für mehrere Objekte.
InformationsquelleAutor der Antwort dasblinkenlight
Das problem ist, dass
std::unordered_set
ist mitstd::hash
Vorlage zu berechnen hashes für seine Einträge und es gibt keinestd::hash
Spezialisierung für Paare. So haben Sie zwei Dinge tun:std::hash
für Ihre Schlüssel-Typ (std::pair<int, int>
) Verwendung dieser Funktion.Hier ist ein einfaches Beispiel:
InformationsquelleAutor der Antwort
Müssen Sie eine Spezialisierung für
std::hash<>
funktioniert mitstd::pair<int, int>
. Hier ist ein sehr einfaches Beispiel von, wie könnte man definieren, ist die Spezialisierung:InformationsquelleAutor der Antwort Andy Prowl
Ihnen fehlt eine hash-Funktion für
std::pair<int, int>>
. Zum Beispiel,Können Sie sich auch spezialisieren
std::hash<T>
fürstd::hash<std::pair<int,int>>
in dem Fall kann man weglassen, der zweite template-parameter.InformationsquelleAutor der Antwort juanchopanza