Мне интересно, почему я не могу использовать карты STL с пользовательскими классами. Когда я компилирую приведенный ниже код, я получаю следующее загадочное сообщение об ошибке. Что это значит? Кроме того, почему это происходит только с пользовательскими типами? (Примитивные типы допустимы, когда они используются в качестве ключа.)
C: \ MinGW \ bin .. \ lib \ gcc \ mingw32 \ 3.4.5 ........ \ include \ c ++ \ 3.4.5 \ bits \ stl_function.h || В функции-члене `bool std :: less ‹_Tp> :: operator () (const _Tp &, const _Tp &) const [с _Tp = Class1] ': |
C: \ MinGW \ bin .. \ lib \ gcc \ mingw32 \ 3.4.5 ........ \ include \ c ++ \ 3.4.5 \ bits \ stl_map.h | 338 | создан из `_Tp & std :: map ‹_Key, _Tp, _Compare, _Alloc> :: operator [] (const _Key &) [с _Key = Class1, _Tp = int, _Compare = std :: less, _Alloc = std :: allocator>] '|
C: \ Users \ Admin \ Documents \ dev \ sandbox \ sandbox \ sandbox.cpp | 24 | экземпляр создан отсюда |
C: \ MinGW \ bin .. \ lib \ gcc \ mingw32 \ 3.4.5 ........ \ include \ c ++ \ 3.4.5 \ bits \ stl_function.h | 227 | ошибка: нет соответствия для оператора ' ‹'In' __x‹ __y '| || === Сборка завершена: 1 ошибка, 0 предупреждений === |
#include <iostream>
#include <map>
using namespace std;
class Class1
{
public:
Class1(int id);
private:
int id;
};
Class1::Class1(int id): id(id)
{}
int main()
{
Class1 c1(1);
map< Class1 , int> c2int;
c2int[c1] = 12;
return 0;
}