Lo que quiero decir es que sabemos que los elementos de std::map
están ordenados según las claves. Entonces, digamos que las claves son enteros. Si repito desde std::map::begin()
a std::map::end()
usando un for
, ¿el estándar garantiza que voy a iterar en consecuencia a través de los elementos con las claves, ordenados en orden ascendente?¿El orden de iteración a través de std :: map es conocido (y está garantizado por el estándar)?
Ejemplo:
std::map<int, int> map_;
map_[1] = 2;
map_[2] = 3;
map_[3] = 4;
for(std::map<int, int>::iterator iter = map_.begin();
iter != map_.end();
++iter)
{
std::cout << iter->second;
}
¿Es esta garantizada para imprimir 234
o se trata de implantación definidos?
razón la vida real: Tengo un std::map
con int
llaves. En situaciones muy raras, me gustaría iterar a través de todos los elementos, con clave, más que un valor concreto de int
. Sí, parece que std::vector
sería la mejor opción, pero fíjate en "situaciones muy raras".
EDITAR: Yo sé, que los elementos de std::map
están ordenados .. no hay necesidad de señalarlo (para la mayoría de las respuestas aquí). Incluso lo escribí en mi pregunta.
Estaba preguntando sobre los iteradores y el orden cuando estoy iterando a través de un contenedor. Gracias @Kerrek SB por la respuesta.
En caso de que no lo sabía: en su vida real usar que puede utilizar 'mapa: : upper_bound' para encontrar el punto para comenzar a iterar. –
Sé esto y sé el lugar exacto que comenzaría a iterar. Simplemente vagué si la orden está garantizada. –
Un vector disperso no sería sensato si sus claves (índices numéricos) varían tremendamente en todos los ámbitos. Estoy usando una solución similar para la cual el índice numérico representa una coordenada y cartesiana en el espacio tridimensional. Usar un vector en este escenario aumentaría la huella de mi memoria en gigabytes. Entonces, no creo que el vector sea una panacea aquí, ni mucho menos. –