我有一个类Record,有三个私有整数字段,getter和setter,以及一个默认的特定构造函数。我打算使用Records填充一个集合,但是在使代码生效时遇到了问题。
#include <set>
using namespace std;
class Record
{
int a, b, c;
public:
//getters and setters
Record(){a = -1; b = -1; c = -1;};
}
int main()
{
set< Record > s;
s.insert(Record());
}
尝试编译此错误的结果:
当我创建一个s和s.insert时,C:\ Users \ Denton \ Documents \ Indiana University \ Class Documents \ Spring 2013 \ CSCI-H2 12 \ Assignment9&gt; g ++ a9.cpp -o a9 在c:\ mingw \ bin ../ lib / gcc / mingw32 / 4.6.2 / include / c ++ / string:5中包含的文件中 0:0, 来自c:\ mingw \ bin ../ lib / gcc / mingw32 / 4.6.2 / include / c ++ / bits / loc ale_classes.h:42, 来自c:\ mingw \ bin ../ lib / gcc / mingw32 / 4.6.2 / include / c ++ / bits / ios _base.h:43, 来自c:\ mingw \ bin ../ lib / gcc / mingw32 / 4.6.2 / include / c ++ / ios:43, 来自c:\ mingw \ bin ../ lib / gcc / mingw32 / 4.6.2 / include / c ++ / ostream: 40, 来自c:\ mingw \ bin ../ lib / gcc / mingw32 / 4.6.2 / include / c ++ / iostream :40, 来自a9.cpp:3: C:\ MinGW的\ BIN ../ LIB / GCC /的mingw32 / 4.6.2 /包括/ C ++ /比特/ stl_function.h: 在会员 function&#39; bool std :: less&lt; _Tp&gt; :: operator()(const _Tp&amp;,const _Tp&amp;)const [with _ Tp =记录]&#39;: C:\ MinGW的\ BIN ../ LIB / GCC /的mingw32 / 4.6.2 /包括/ C ++ /比特/ stl_tree.h:1267:4: 研究所 来自&#39; std :: pair,bool&gt;的std :: _ Rb_tree&LT; _key, _Val,_KeyOfValue,_Compare,_ Alloc&gt; :: _ M_insert_unique(const _Val&amp;)[with _Key = Record,_Val = Record,_KeyOfValue = std :: _ Identity,_Compare = std :: l ess,_Alloc = std :: allocator]&#39; C:\ MinGW的\ BIN ../ LIB / GCC /的mingw32 / 4.6.2 /包括/ C ++ /比特/ stl_set.h:410:29: 斯塔 来自&#39; std :: pair, _Compare,typename _Alloc :: rebind&lt; _Key&gt; :: other&gt; :: const_iterator,bool&gt;的std ::设为 &lt; _Key,_Compare,_ Alloc&gt; :: insert(const value_type&amp;)[with _Key = Record,_Compar e = std :: less,_Alloc = std :: allocator,typename std :: _ Rb_tree&lt; _ Key,_ Key,std :: _ Identity&lt; _Key&gt;,_ Compare,typename _Alloc :: rebind&lt; _Key&gt; :: other&gt; :: const_iterator = std :: _ Rb_tree_const_iterator,std :: set&lt; _Key,_Compare ,_Alloc&gt; :: value_type =记录]&#39; a9.cpp:72:28:从这里实例化 C:\ MinGW的\ BIN ../ LIB / GCC /的mingw32 / 4.6.2 /包括/ C ++ /比特/ stl_function.h:236:22: 呃 ror:不匹配&#39;运营商&lt;&#39; in&#39; __ x&lt; __y&#39; C:\ MinGW的\ BIN ../ LIB / GCC /的mingw32 / 4.6.2 /包括/ C ++ /比特/ stl_function.h:236:22: 没有 te:候选人是: C:\ MinGW的\ BIN ../ LIB / GCC /的mingw32 / 4.6.2 /包括/ C ++ /比特/ stl_pair.h:207:5: 注意:t emplate bool std :: operator&lt;(const std :: pair&lt; _T1,_T2&gt;&amp;,co nst std :: pair&lt; _T1,_T2&gt;&amp;) C:\ MinGW的\ BIN ../ LIB / GCC /的mingw32 / 4.6.2 /包括/ C ++ /比特/ stl_iterator.h:291:5: 不 e:模板bool std :: operator&lt;(const std :: reverse_iterator&lt; _It erator&gt;&amp;,const std :: reverse_iterator&lt; _Iterator&gt;&amp;) C:\ MinGW的\ BIN ../ LIB / GCC /的mingw32 / 4.6.2 /包括/ C ++ /比特/ stl_iterator.h:341:5: 不 e:template bool std :: operator&lt;(const std :: r everse_iterator&lt; _IteratorL&gt;&amp;,const std :: reverse_iterator&lt; _IteratorR&gt;&amp;) C:\ MinGW的\ BIN ../ LIB / GCC /的mingw32 / 4.6.2 /包括/ C ++ /比特/ basic_string.h:2510:5: 没有 te:template bool std :: operator&lt;(cons t std :: basic_string&lt; _CharT,_Traits,_Alloc&gt;&amp;,const std :: basic_string&lt; _CharT,_ 特征,_Alloc&gt;&amp;) C:\ MinGW的\ BIN ../ LIB / GCC /的mingw32 / 4.6.2 /包括/ C ++ /比特/ basic_string.h:2522:5: 没有 te:template bool std :: operator&lt;(cons t std :: basic_string&lt; _CharT,_Traits,_Alloc&gt;&amp;,const _CharT *) C:\ MinGW的\ BIN ../ LIB / GCC /的mingw32 / 4.6.2 /包括/ C ++ /比特/ basic_string.h:2534:5: 没有 te:template bool std :: operator&lt;(cons t _CharT *,const std :: basic_string&lt; _CharT,_Traits,_Alloc&gt;&amp;) C:\ MinGW的\ BIN ../ LIB / GCC /的mingw32 / 4.6.2 /包括/ C ++ /比特/ stl_vector.h:1290:5: 注意 :template bool std :: operator&lt;(const std :: vector&lt; _Tp,_ Alloc&gt;&amp;,const std :: vector&lt; _Tp,_Alloc&gt;&amp;) C:\ MinGW的\ BIN ../ LIB / GCC /的mingw32 / 4.6.2 /包括/ C ++ /比特/ stl_list.h:1593:5: 注意: template bool std :: operator&lt;(const std :: list&lt; _Tp,_Allo c&gt;&amp;,const std :: list&lt; _Tp,_Alloc&gt;&amp;) C:\ MinGW的\ BIN ../ LIB / GCC /的mingw32 / 4.6.2 /包括/ C ++ /比特/ stl_tree.h:856:5: 注意:t emplate bool std :: operator&lt;(const std :: _ Rb_tree&lt; _Key,_Val,_KeyOfValue,_Compare,_ All oc&gt;&amp;,const std :: _ Rb_tree&lt; _Key,_Val,_KeyOfValue,_Compare,_Alloc&gt;&amp;) C:\ MinGW的\ BIN ../ LIB / GCC /的mingw32 / 4.6.2 /包括/ C ++ /比特/ stl_set.h:713:5: 注意:te mplate bool std :: operator&lt;(const std :: set&lt; _Key,_Compare,_ Alloc&gt;&amp;,const std :: set&lt; _Key,_Compare,_Alloc&gt;&amp;) C:\ MinGW的\ BIN ../ LIB / GCC /的mingw32 / 4.6.2 /包括/ C ++ /比特/ stl_multiset.h:696:5: 不 e:模板bool std :: operator&lt;(const std :: multiset&lt; _Key,_Compare,_Alloc&gt;&amp;,const std :: multiset&lt; _Key,_Compare,_ All OC&GT;&安培;)
插入工作正常(1) 要编译此代码需要做什么?
提前致谢。
答案 0 :(得分:11)
您需要重载operator<
:
如下所示:
bool operator<(const Record& rhs) const
{
return a < rhs.a; //assume that you compare the record based on a
}
原因是STL集维护元素的顺序。 std :: set支持指定比较函数。默认值为less
,它将使用operator <
来检查相等性。
同时,你必须用;
结束你的类定义,否则编译错误。
class Record
{
int a, b, c;
public:
//getters and setters
Record(){a = -1; b = -1; c = -1;};
}; //<---Cannot miss this ;