2010-03-29 13 views
12

con un vector, que puede hacer lo siguiente:¿Acceder a un elemento en un conjunto?

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

tengo el siguiente conjunto:

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

¿Cómo puedo acceder a los elemento me inserta en el conjunto?

+1

Qué elemento? ¿Y para qué? – GManNickG

Respuesta

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

Debería verificar 'iter! = Myset.end()' antes de desreferenciar ese iterador. –

+3

si sabes que estás buscando 100, ¿por qué no asignar 100 a 'setint'? – wilhelmtell

+0

El equivalente a eso en el caso 'vector' es' vecint = * find (myvec.begin(), myvec.end(), 100); ' – wilhelmtell

7

No se puede acceder a los elementos establecidos por índice. Tienes que acceder a los elementos usando un iterador.

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

Si el elemento que desea no es el primero, avance el iterador hacia ese elemento. Puede buscar en un conjunto para ver si existe un elemento, usando set<>::find(), o puede recorrer el conjunto para ver qué elementos hay.

+0

Los iteradores y las posiciones de los elementos se invalidan solo si se borran los elementos del conjunto. – UncleBens

+0

Ah, lo siento. la inserción en un conjunto no invalida los iteradores antiguos, y el borrado de elementos tampoco invalida los viejos iteradores (excepto, por supuesto, para los iteradores que apuntan al elemento eliminado). – wilhelmtell

1

También puede utilizar este enfoque:

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