2010-12-12 11 views
8

Chciałbym użyć unordered_set w projekcie.Boost - niepokazany_set samouczek/przykłady/WSZYSTKO?

Jednak dokumentacja jest niekompletna lub jest jedynie dokumentem technicznym, bez przykładów.

Czy każdy może podać linki do zasobów internetowych, które sobie z tym poradzą? Książki również mile widziane, najlepiej bezpłatne. Wyszukiwarka Google nie zwróciła nic wartościowego.

Dzięki!

Odpowiedz

7

Jest na nim niewiele dokumentów, ponieważ zachowuje się dokładnie tak jak std::set, z tym wyjątkiem, że wymaga funkcji mieszania i równości zamiast funkcji porównania. Po prostu przejrzyj przykłady dla std::set i zastąp je std::unordered_set, a wszystko powinno być w porządku.

Jeśli potrzebujesz napisać funkcję mieszającą, istnieją przykłady w dokumentach, tj. this one.

+0

Może mieć interfejs bardzo podobny do std :: set, ale jego zachowanie jest inny. Oprócz tego, w jaki sposób hashing przyspiesza, istnieją również sposoby, dzięki którym Boost 'unordered_set' może być wolniejszy, takie jak: https://svn.boost.org/trac/boost/ticket/3693 –

+0

@John: It's charakterystyki wydajności są różne i nie można ich powtarzać w uporządkowany sposób (no cóż, nazywa się to "unordered_set"). W przeciwnym razie zachowuje się dokładnie tak, jak robi to 'std :: set'. –

+0

Naprawiono problem z wymazywaniem: Cytat z boostu 1.61_0: Notatki: W starszych wersjach może to być nieefektywne, ponieważ musiało przeszukać kilka segmentów, aby znaleźć pozycję zwróconego iteratora. Struktura danych została zmieniona, więc nie ma już takiej możliwości, a alternatywne metody wymazywania zostały wycofane. – Sid

4

Kontener doładowania jest w rzeczywistości implementacją interfejsu zdefiniowanego po raz pierwszy w raporcie technicznym biblioteki standardowej C++ (znanym jako TR1), jak wspomniano w dokumentach doładowań. Wydaje się, że są już częścią nowego projektu roboczego standardów. Google pojawia się więcej dokumentacji/przykładów, jeśli szukasz tr1 i unordered_set. Lubię odniesienia MSDN, który ma także kilka próbek:

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

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

8

kod na najczęstsze zastosowanie:

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

Output

found red 
found blue 

Więcej informacji

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