2014-07-09 16 views
11

Sono curioso di sapere se ci fosse qualcosa di simile all'hashset di Java in C++. Io sono una struttura dati con un aspetto veloce, dato che userò solo .contains (e) su di esso. Allo stesso modo, se potessi illuminarmi su come fare un .contains() su qualsiasi struttura di dati che proponi, sarei molto riconoscente. O, per favore non pubblicare solo i documenti C++ come ho già fatto e li trovo gravosi.Java HashSet equiv in C++

+1

'std :: unordered_set' sarebbe il più vicino – quantdev

risposta

9

È possibile utilizzare std::unordered_set<> (standard § 23.5.6), il suo metodo find (per fare una ricerca) come media complessità di 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:

Come suggerito da @Drew Dormann, è possibile utilizzare alternativamente count, che ha anche una complessità media di O (1):

#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

Io raccomanderei' count() 'per emulare contains(). Quella 2 riga se diventa semplicemente 'if (esempio.count (2))' –

+0

@Drew: sì, aggiunto – quantdev

+0

fantastico grazie a tutti e due! – user1352683