2010-03-29 3 views
12

Avec un vecteur, je peux faire ce qui suit:Accéder à un élément dans un ensemble?

vector<int> myvec (4,100); 
int first = myvec.at(0); 

Je l'ensemble suivant:

set<int> myset; 
myset.insert(100); 
int setint = ???? 

Comment puis-je accéder au l'élément I inséré dans l'ensemble?

+1

Quel élément? Et dans quel but? – GManNickG

Répondre

13
set<int>::iterator iter = myset.find(100); 
if (iter != myset.end()) 
{ 
    int setint = *iter; 
} 
+1

Vous devriez vérifier 'iter! = Myset.end()' avant de déréférencer cet itérateur. –

+3

Si vous savez que vous cherchez 100, pourquoi ne pas simplement attribuer 100 à 'setint'? – wilhelmtell

+0

L'équivalent de celui dans le cas du 'vector' est' vecint = * find (myvec.begin(), myvec.end(), 100); ' – wilhelmtell

7

Vous ne pouvez pas accéder aux éléments de définition par index. Vous devez accéder aux éléments en utilisant un itérateur. Si l'élément que vous voulez n'est pas le premier, avancez l'itérateur vers cet élément. Vous pouvez regarder dans un ensemble pour voir si un élément existe, en utilisant set<>::find(), ou vous pouvez parcourir l'ensemble pour voir quels éléments sont là.

+0

Les itérateurs et les positions des éléments ne sont invalidés que si vous effacez les éléments du ensemble. – UncleBens

+0

Ah, désolé. l'insertion dans un ensemble n'invalide pas les anciens itérateurs et l'effacement des éléments n'invalide pas non plus les anciens itérateurs (sauf bien sûr pour les itérateurs pointant sur l'élément supprimé). – wilhelmtell

1

Vous pouvez également utiliser cette approche:

set<int>:: iterator it; 
for(it = s.begin(); it!=s.end(); ++it){ 
    int ans = *it; 
    cout << ans << endl; 
} 
Questions connexes