web-dev-qa-db-fra.com

Comment itérer std :: set?

J'ai ce code:

std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it)
{
    u_long f = it; // error here
}

Il n'y a pas de valeur ->first. Comment puis-je obtenir la valeur?

75
Roman

Vous devez déréférencer l'itérateur pour pouvoir récupérer le membre de votre ensemble.

std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it)
{
    u_long f = *it; // Note the "*" here
}

Si vous avez des fonctionnalités C++ 11, vous pouvez utiliser une boucle basée sur une plage for :

for(auto f : SERVER_IPS) {
  // use f here
}    
118
Robᵩ

Il suffit d'utiliser le * avant it:

set<unsigned long>::iterator it;
for (it = myset.begin(); it != myset.end(); ++it) {
    cout << *it;
}

Cela le supprime et vous permet d'accéder à l'élément sur lequel se trouve actuellement l'itérateur.

12
Rami Jarrar

Un autre exemple pour le standard C++ 11:

set<int> data;
data.insert(4);
data.insert(5);

for (const int &number : data)
  cout << number;
9
vitperov

Ceci est une solution complète à la question:

Comment iterrez-vous std :: set?

int main(int argc,char *argv[]) 
{
    std::set<int> mset;
    mset.insert(1); 
    mset.insert(2);
    mset.insert(3);

    for ( auto it = mset.begin(); it != mset.end(); it++ )
        std::cout << *it;
}
3
Luis B