Aujourd'hui, j'ai créé une carte, où le type de valeur n'a pas de constructeur par défaut. J'ai été surpris de ne pas pouvoir utiliser operator [] pour insérer les éléments sur cette carte, mais j'ai dû utiliser la méthode insert. Alors, quelles sont exactement les exigences pour les types de clé et de valeur pour std :: map?Exigences de type pour std :: map
est court exemple ici:
#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;
}
Je compile comme ceci:
[[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 principe, c'est une bonne réponse, mais cela n'explique pas pourquoi le code OP a échoué. –
@Konrad Ah, mais c'est parce que je lui ai répondu AVANT qu'il a posté ses messages d'erreur. Tout ce qu'il avait posté à ce moment-là, c'était que ça ne marchait pas. – blwy10