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

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

我想知道为什么我不能在用户定义的类中使用STL映射。当我编译下面的代码时,我会得到以下神秘的错误消息。什么意思?另外,为什么它只发生在用户定义的类型上?(将基元类型用作键时是可以的。)

C:\MinGW\bin..\lib\gcc\mingw32\3.4.5.\include\c++\3.4.5\bits\stl_function.h||In成员函数`boolstd:less<_tp>:Operator()(const_tp&,const_tp&)const[with_tp=Class 1]

从`_tp和std:map<_key,_tp,_C:\MinGW\bin..\lib\gcc\mingw32\3.4.5.\include\c++\3.4.5\bits\stl_map.h|338|instantiated>:操作符[](const_key&)[With_key=Class 1,_tp=int,_Compare=std:less,_alloc=std:allocator>]‘C:\MinGW\bin..\lib\gcc\mingw32\3.4.5.\include\c++\3.4.5\bits\stl_map.h|338|instantiated

C:\Users\Admin\Documents\dev\sandbox\sandbox.cpp|24|instantiated从这里开始

C:\MinGW\bin..\lib\gcc\mingw32\3.4.5.\include\c++\3.4.5\bits\stl_function.h|227|error:不匹配“运算符<”中的“_x<_y‘\x=生成已完成:1错误,0警告=x

#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;}


郎朗坤
浏览 587回答 3
3回答

紫衣仙女

默认情况下std::map(和std::set)使用operator<来确定分类。因此,您需要定义operator<在你的课上。两个物体被认为等价物&nbsp;if !(a < b) && !(b < a).如果出于某种原因,您希望使用不同的比较器,则使用map可以更改std::greater例如。
打开App,查看更多内容
随时随地看视频慕课网APP