2010-12-12 8 views
8

Ich möchte unordered_set in einem Projekt verwenden.Boost - unordered_set Tutorial/Beispiele/ALLES?

Dokumentation ist jedoch entweder unvollständig oder nur eine technische Referenz, keine Beispiele.

Kann jemand Links zu Online-Ressourcen, die damit umgehen? Bücher auch willkommen, vorzugsweise frei. Google-Suche ergab nichts von Wert.

Danke!

Antwort

7

Es gibt wenig Dokumente darauf, weil es genau wie std::set verhält, mit der Ausnahme, dass es eine Hashing- und Equal-Funktion anstelle einer Vergleichsfunktion erfordert. Schauen Sie einfach nach Beispielen für std::set, und ersetzen Sie sie durch std::unordered_set und Sie sollten in Ordnung sein.

Wenn Sie eine Hash-Funktion schreiben müssen, gibt es Beispiele in den Dokumenten, d. H. this one.

+0

Es kann eine Schnittstelle sehr ähnlich müssen std :: set, aber sein Verhalten ist anders. Abgesehen von den Möglichkeiten, mit denen Hashing es beschleunigt, gibt es auch Möglichkeiten, wie Boosts 'ungeordnetes_set' langsamer sein kann, wie zum Beispiel: https://svn.boost.org/trac/boost/ticket/3693 –

+0

@John: Es ist Leistungsmerkmale sind unterschiedlich, und es kann nicht in einer geordneten Art und Weise iteriert werden (gut, es heißt "ungeordnetes_set"). Ansonsten verhält es sich genau wie 'std :: set'. –

+0

Das Problem der Löschleistung wurde behoben: Zitat von Boost 1.61_0: Hinweise: In älteren Versionen könnte dies ineffizient sein, da es mehrere Buckets durchsuchen musste, um die Position des zurückgegebenen Iterators zu finden. Die Datenstruktur wurde geändert, so dass dies nicht mehr der Fall ist und die alternativen Löschmethoden nicht mehr verwendet werden. – Sid

4

Die Boost-Container sind effektiv eine Implementierung der Schnittstelle, die zuerst im Technischen C++ - Standardbibliotheksbericht (bekannt als TR1) angegeben wurde, wie in den Boost-Dokumenten erwähnt. Sie scheinen Teil des Arbeitsentwurfs für neue Standards zu sein. Wenn Sie nach tr1 und unordered_set suchen, zeigt Google einige weitere Dokumente/Beispiele an. Ich mag die MSDN Referenz, die auch einige Proben hat:

http://msdn.microsoft.com/en-us/library/bb982739.aspx

http://www.google.de/search?q=tr1+unordered_set

8

-Code für die häufigste Anwendungsfall:

#include <boost/unordered_set.hpp> 
using boost::unordered_set; 
using std::string; 
using std::cout; 
using std::endl; 

int main (void) 
{ 
    // Initialize set 
    unordered_set<string> s; 
    s.insert("red"); 
    s.insert("green"); 
    s.insert("blue"); 

    // Search for membership 
    if(s.find("red") != s.end()) 
     cout << "found red" << endl; 
    if(s.find("purple") != s.end()) 
     cout << "found purple" << endl; 
    if(s.find("blue") != s.end()) 
     cout << "found blue" << endl; 

    return 0; 
} 

Ausgabe

found red 
found blue 

Weitere Informationen

http://www.cplusplus.com/reference/unordered_set/unordered_set/find/