Je suis confus quant à la façon d'obtenir les éléments dans l'ensemble. Je pense que je dois utiliser l'itérateur, mais comment puis-je le parcourir?
Remplacez type
par, par exemple, int
.. Et var
par le nom de l'ensemble
for (set<type>::iterator i = var.begin(); i != var.end(); i++) {
type element = *i;
}
Le meilleur moyen cependant est d'utiliser boost :: foreach . Le code ci-dessus deviendrait simplement:
BOOST_FOREACH(type element, var) {
/* Here you can use var */
}
Vous pouvez aussi faire #define foreach BOOST_FOREACH
pour pouvoir faire ceci:
foreach(type element, var) {
/* Here you can use var */
}
Par exemple:
foreach(int i, name_of_set) {
cout << i;
}
Utilisez les itérateurs:
std::set<int> si;
/* ... */
for(std::set<int>::iterator it=si.begin(); it!=si.end(); ++it)
std::cout << *it << std::endl;
Notez que de nombreuses références telles que MSDN et cplusplus.com fournissent des exemples - un exemple . ;)
Pour lister tous les éléments du jeu, vous pouvez faire quelque chose comme:
#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;
}
Pour vérifier si un élément spécifique de l'ensemble ou non, vous pouvez utiliser la méthode find () de la classe set STL
J'aime ce que je vois dans VS2010 Beta2 en utilisant la syntaxe 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;
} );
Pour C++ 11 et plus récent:
std::set<int> my_set;
for (auto item : my_set)
std::cout << item << endl;
set<int> os;
for (auto itr = os.begin(); itr != os.end() ; ++itr) cout << *itr << endl;