2009-12-23 11 views
11

No estoy seguro de cómo obtener los elementos en el conjunto. Creo que tengo que usar el iterador, pero ¿cómo lo paso?¿Cómo obtener los elementos en un conjunto en C++?

+0

Ambas respuestas a continuación son correctos, pero para ser un poco más directo: los iteradores se mueven hacia adelante o hacia atrás a través del conjunto de resultados utilizando el incremento (++) y decremento (-) operadores. – Toji

Respuesta

18

Reemplazar type con, por ejemplo, int .. Y var con el nombre del conjunto de

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

La mejor manera sin embargo es utilizar boost::foreach. El código anterior podría ser simplemente:

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

También se puede hacer #define foreach BOOST_FOREACH de modo que usted puede hacer esto:

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

Por ejemplo:

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

Use iteradores:

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

en cuenta que muchas referencias como MSDN y cplusplus.com proporciona ejemplos - one example. ;)

3

para enumerar todos los elementos de la establecer que puede hacer algo como:

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

Para comprobar si un elemento específico en el conjunto o no puede utilizar el método find() del conjunto de la clase STL

2

Me está gustando lo que estoy viendo en VS2010 Beta2 usando la sintaxis lambda de 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

para C++ 11 y más recientes:

std::set<int> my_set; 
for (auto item : my_set) 
    std::cout << item << endl; 
Cuestiones relacionadas