web-dev-qa-db-fra.com

Comment obtenir les éléments d'un ensemble en C++?

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?

12
SuperString

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;
}
19
Andreas Bonini

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 . ;)

6
Georg Fritzsche

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

3
codaddict

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; 
               } );
2
paxos1977

Pour C++ 11 et plus récent:

std::set<int> my_set;
for (auto item : my_set)
    std::cout << item << endl;
2
tvorez
set<int> os;
for (auto itr  = os.begin(); itr != os.end() ; ++itr) cout << *itr << endl;
0
skpro19