Si existe, ¿cómo sería una std::map
lista de inicializadores extendida?
Probé algunas combinaciones de ... bueno, todo lo que se me ocurrió con GCC 4.4, pero no encontré nada que compilara.
fuente
Si existe, ¿cómo sería una std::map
lista de inicializadores extendida?
Probé algunas combinaciones de ... bueno, todo lo que se me ocurrió con GCC 4.4, pero no encontré nada que compilara.
Existe y funciona bien:
std::map <int, std::string> x
{
std::make_pair (42, "foo"),
std::make_pair (3, "bar")
};
Recuerde que el tipo de valor de un mapa es pair <const key_type, mapped_type>
, por lo que básicamente necesita una lista de pares con los mismos tipos o convertibles.
Con la inicialización unificada con std :: pair, el código se vuelve aún más simple
std::map <int, std::string> x {
{ 42, "foo" },
{ 3, "bar" }
};
Me gustaría agregar a la respuesta de doublep que la inicialización de la lista también funciona para mapas anidados. Por ejemplo, si tiene un std::map
con std::map
valores, puede inicializarlo de la siguiente manera (solo asegúrese de no ahogarse entre llaves):
int main() {
std::map<int, std::map<std::string, double>> myMap{
{1, {{"a", 1.0}, {"b", 2.0}}}, {3, {{"c", 3.0}, {"d", 4.0}, {"e", 5.0}}}
};
// C++17: Range-based for loops with structured binding.
for (auto const &[k1, v1] : myMap) {
std::cout << k1 << " =>";
for (auto const &[k2, v2] : v1)
std::cout << " " << k2 << "->" << v2;
std::cout << std::endl;
}
return 0;
}
Salida:
1 => a-> 1 b-> 2
3 => c-> 3 d-> 4 e-> 5
map( std::initializer_list<value_type> init, const Compare& comp = Compare(), const Allocator& alloc = Allocator() );
está disponible desde C ++ 11 ymap( std::initializer_list<value_type> init, const Allocator& );
solo está disponible desde C ++ 14 . Referencia: std :: map