C++ Elementos de acceso


Ejemplo

Un std::map toma pares (key, value) como entrada.

Considere el siguiente ejemplo de std::map initialization:

std::map < std::string, int > ranking { std::make_pair("stackoverflow", 2), 
                                        std::make_pair("docs-beta", 1) };

En un std::map , los elementos se pueden insertar de la siguiente manera:

ranking["stackoverflow"]=2;
ranking["docs-beta"]=1;

En el ejemplo anterior, si el stackoverflow llaves ya está presente, su valor se actualizará a 2. Si no está ya presente, se creará una nueva entrada.

En un std::map , se puede acceder a los elementos directamente dando la clave como un índice:

std::cout << ranking[ "stackoverflow" ] << std::endl;

Tenga en cuenta que usar el operator[] en el mapa insertará un nuevo valor con la clave consultada en el mapa. Esto significa que no puede usarlo en un const std::map , incluso si la clave ya está almacenada en el mapa. Para evitar esta inserción, verifique si el elemento existe (por ejemplo, utilizando find() ) o use at() como se describe a continuación.

C ++ 11

Se puede acceder at() elementos de un std::map con at() :

std::cout << ranking.at("stackoverflow") << std::endl;

Tenga at() cuenta que at() lanzará una excepción std::out_of_range si el contenedor no contiene el elemento solicitado.

En ambos contenedores std::map y std::multimap , se puede acceder a los elementos utilizando los iteradores:

C ++ 11
// Example using begin()
std::multimap < int, std::string > mmp { std::make_pair(2, "stackoverflow"),
                                         std::make_pair(1, "docs-beta"),
                                         std::make_pair(2, "stackexchange")  };
auto it = mmp.begin();
std::cout << it->first << " : " << it->second << std::endl; // Output: "1 : docs-beta"
it++;
std::cout << it->first << " : " << it->second << std::endl; // Output: "2 : stackoverflow"
it++;
std::cout << it->first << " : " << it->second << std::endl; // Output: "2 : stackexchange"

// Example using rbegin()
std::map < int, std::string > mp {  std::make_pair(2, "stackoverflow"),
                                    std::make_pair(1, "docs-beta"),
                                    std::make_pair(2, "stackexchange")  };
auto it2 = mp.rbegin();
std::cout << it2->first << " : " << it2->second << std::endl; // Output: "2 : stackoverflow"
it2++;
std::cout << it2->first << " : " << it2->second << std::endl; // Output: "1 : docs-beta"