2014-07-09 18 views
11

Ich bin neugierig, ob es etwas ähnliches wie das Java-Hashset in C++ gibt. Ie.e eine Datenstruktur mit schnellem Blick, da ich nur .contains (e) darauf laufen lassen werde. Ebenso, wenn Sie mich aufklären könnten, wie man eine .contains() auf welcher Datenstruktur, die Sie vorschlagen, macht, wäre ich sehr dankbar. O, bitte posten Sie nicht nur die C++ - Dokumente, wie ich es bereits getan habe und finde sie lästig.Java HashSet equiv in C++

+1

'std :: unordered_set' wäre der nächste – quantdev

Antwort

9

Sie können std::unordered_set<> (Standard § 23.5.6) verwenden, seine find Methode (eine Lookup zu tun) als durchschnittliche Komplexität von O (1):

#include <iostream> 
#include <unordered_set> 

int main() 
{ 
    std::unordered_set<int> example = {1, 2, 3, 4}; 

    auto search = example.find(2); 
    if(search != example.end()) { 
     std::cout << "Found " << (*search) << '\n'; 
    } 
    else { 
     std::cout << "Not found\n"; 
    } 
} 

EDIT:

wie von @Drew Dormann vorgeschlagen, können Sie alternativ count verwenden, die auch eine durchschnittliche Komplexität von O (1) aufweist:

#include <iostream> 
#include <unordered_set> 

int main() 
{ 
    std::unordered_set<int> example = {1, 2, 3, 4}; 

    if(example.count(2)) { 
     std::cout << "Found\n"; 
    } 
    else { 
     std::cout << "Not found\n"; 
    } 
} 
+2

Ich würde' count() 'für die Emulation von contains() empfehlen. Diese 2 Zeile wird einfach 'if (example.count (2))' –

+0

@Drew: yep, hinzugefügt – quantdev

+0

genial danke euch beiden! – user1352683

Verwandte Themen