2010-03-29 34 views
12

Con un vettore, posso effettuare le seguenti operazioni:Accedere a un elemento in un set?

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

Ho la seguente serie:

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

Come posso accedere al all'elemento ho inserito nel set?

+1

Quale elemento? E per quale scopo? – GManNickG

risposta

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

Dovresti controllare 'iter! = Myset.end()' prima di dereferenziare quell'iteratore. –

+3

se sai che stai cercando 100, perché non assegnare 100 a 'setint'? – wilhelmtell

+0

L'equivalente a quello nel caso 'vector' è' vecint = * find (myvec.begin(), myvec.end(), 100); ' – wilhelmtell

7

Non è possibile accedere agli elementi impostati per indice. Devi accedere agli elementi usando un iteratore.

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

Se l'elemento desiderato non è il primo, far avanzare l'iteratore su quell'elemento. Puoi guardare in un set per vedere se esiste un elemento, usando set<>::find(), o puoi scorrere sul set per vedere quali elementi ci sono.

+0

Gli iteratori e le posizioni degli elementi sono invalidati solo se si cancellano elementi dal impostato. – UncleBens

+0

Ah, mi dispiace. l'inserimento in un set non invalida i precedenti iteratori e gli elementi di cancellazione non invalida i vecchi iteratori (tranne ovviamente per gli iteratori che puntano all'elemento rimosso). – wilhelmtell

1

È inoltre possibile utilizzare questo approccio:

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