2010-12-12 74 views
8

Je souhaite utiliser unordered_set dans un projet.Boost - tutoriel unordered_set/exemples/RIEN?

Cependant, la documentation est incomplète ou juste une référence technique, pas d'exemples.

Quelqu'un peut-il fournir des liens vers des ressources en ligne qui traitent avec lui? Les livres sont également les bienvenus, de préférence gratuits. La recherche Google n'a rien donné de valeur.

Merci!

Répondre

7

Il y a peu de docs car il se comporte exactement comme std::set, à l'exception du fait qu'il requiert une fonction de hachage et d'égalité au lieu d'une fonction de comparaison. Il suffit de rechercher des exemples pour std::set, et les remplacer par std::unordered_set et vous devriez aller bien.

Si vous devez écrire une fonction de hachage, il existe des exemples dans les documents, par exemple this one.

+0

Il peut avoir une interface très similaire à std :: set, mais son comportement est différent. Mis à part les façons dont le hachage le rend plus rapide, il y a aussi des façons dont le 'unordered_set 'de Boost peut être plus lent, comme: https://svn.boost.org/trac/boost/ticket/3693 –

+0

@John: C'est les caractéristiques de performance sont différentes, et il ne peut pas être itéré de manière ordonnée (bien, il est appelé 'unordered_set'). Sinon, il se comporte exactement comme le fait 'std :: set'. –

+0

Le problème de performance d'effacement a été corrigé depuis: Citation de boost 1.61_0: Notes: Dans les anciennes versions, cela pouvait être inefficace car il fallait chercher dans plusieurs compartiments pour trouver la position de l'itérateur retourné. La structure de données a été modifiée pour que ce ne soit plus le cas, et les méthodes d'effacement alternatives ont été abandonnées. – Sid

4

Les conteneurs boost sont en fait une implémentation de l'interface spécifiée en premier lieu par le rapport technique de la bibliothèque standard C++ (connu sous le nom de TR1), comme mentionné dans les documents boost. Ils semblent faire partie du nouveau projet de normes de travail maintenant. Google propose d'autres documents/exemples si vous recherchez tr1 et unordered_set. J'aime la référence MSDN, qui a aussi quelques échantillons:

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

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

8

Code pour l'utilisation le plus courant:

#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; 
} 

Sortie

found red 
found blue 

Plus d'informations

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