2009-12-23 14 views
11

Sono confuso su come ottenere gli elementi nel set. Penso di dover usare l'iteratore ma come faccio a superarlo?Come ottenere gli elementi in un set in C++?

+0

Entrambe le risposte di seguito sono corrette, ma per essere un po 'più diretto: iteratori sono spostati in avanti o all'indietro attraverso il set di risultati utilizzando il incremento (++) e decremento (-) operatori. – Toji

risposta

18

Sostituire type con, per esempio, int .. E var con il nome del set

for (set<type>::iterator i = var.begin(); i != var.end(); i++) { 
    type element = *i; 
} 

Il modo migliore è però di utilizzare boost::foreach. Il codice di cui sopra sarebbe semplicemente diventata:

BOOST_FOREACH(type element, var) { 
    /* Here you can use var */ 
} 

Si può anche fare #define foreach BOOST_FOREACH in modo che si può fare questo:

foreach(type element, var) { 
    /* Here you can use var */ 
} 

Ad esempio:

foreach(int i, name_of_set) { 
    cout << i; 
} 
6

Utilizzare gli iteratori:

std::set<int> si; 
/* ... */ 
for(std::set<int>::iterator it=si.begin(); it!=si.end(); ++it) 
    std::cout << *it << std::endl; 

Si noti che molti riferimenti come MSDN e cplusplus.com fornisce esempi - one example. ;)

3

per elencare tutti gli elementi della set puoi fare qualcosa come:

#include <iostream> 
#include <set> 
using namespace std; 

int main() 
{ 
    int myints[] = {1,2,3,4,5}; 
    set<int> myset (myints,myints+5); 

    set<int>::iterator it; 

    cout << "myset contains:"; 
    for (it=myset.begin() ; it != myset.end(); it++) 
    cout << " " << *it; 

    cout << endl; 

    return 0; 
} 

Per verificare se uno specifico elemento nel set o non è possibile utilizzare il metodo find() dalla classe STL impostata

2

Mi piace quello che sto vedendo in VS2010 Beta2 utilizzando la sintassi lambda C++ 0x:

std::for_each(s.begin(), s.end(), 
       [](int value) 
       { 
        // what would be in a function operator() goes here. 
        std::cout << value << std::endl; 
       }); 
0
set<int> os; 
for (auto itr = os.begin(); itr != os.end() ; ++itr) cout << *itr << endl; 
2

per C++ 11 e successivi:

std::set<int> my_set; 
for (auto item : my_set) 
    std::cout << item << endl; 
Problemi correlati