为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用带有用户定义类型的std :: maps作为键?

如何使用带有用户定义类型的std :: maps作为键?

C++
达令说 2019-07-23 14:38:44
如何使用带有用户定义类型的std :: maps作为键?我想知道为什么我不能将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 [with _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&)[with _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;}
查看完整描述

3 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

默认情况下std::map(和std::set)用于operator<确定排序。因此,您需要operator<在您的班级上定义。

两个对象被认为是等同的 if !(a < b) && !(b < a)

例如,如果由于某种原因,您想要使用不同的比较器,map则可以更改第三个模板参数std::greater


查看完整回答
反对 回复 2019-07-23
  • 3 回答
  • 0 关注
  • 415 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信