Hoy creé un mapa, donde el tipo de valor no tiene un constructor predeterminado. Me sorprendió que no pudiera usar el operador [] para insertar los elementos en este mapa, pero tuve que usar el método de inserción.Requisitos de tipo para std :: map
Entonces, ¿qué son exactamente los requisitos para la clave y los tipos de valores para std :: map?
Aquí es breve ejemplo:
#include <map>
struct A
{
A(int){}
};
int main()
{
std::map< int, A > m;
A a1(2);
A a2(3);
A a3(4);
m[5] = a1;
m[3] = a2;
m[2] = a3;
}
Estoy compilando así:
[[email protected] tmp]$ g++ b5.cpp -Wall -Wextra -ansi -pedantic
/usr/lib/gcc/i386-redhat-linux/4.3.0/../../../../include/c++/4.3.0/bits/stl_map.h: In member function ‘_Tp& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&) [with _Key = int, _Tp = A, _Compare = std::less<int>, _Alloc = std::allocator<std::pair<const int, A> >]’:
b5.cpp:14: instantiated from here
/usr/lib/gcc/i386-redhat-linux/4.3.0/../../../../include/c++/4.3.0/bits/stl_map.h:419: error: no matching function for call to ‘A::A()’
b5.cpp:5: note: candidates are: A::A(int)
b5.cpp:4: note: A::A(const A&)
En principio, es una buena respuesta, pero no explica por qué falló el código del OP. –
@Konrad Ah, pero eso es porque respondí ANTES de que publicara sus mensajes de error. Todo lo que había publicado en ese momento era que simplemente no funcionaba. – blwy10