参见英文答案 > problems with c++ set container 2个
> Cant insert to std::map (G++) 1个
我有一个类,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());
}
尝试编译导致此错误的结果:
C:\Users\Denton\Documents\Indiana University\Class Documents\Spring
2013\CSCI-H2
12\Assignment9>g++ a9.cpp -o a9
In file included from c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/string:5
0:0,
from c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/bits/loc
ale_classes.h:42,
from c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/bits/ios
_base.h:43,
from c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/ios:43,
from c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/ostream:
40,
from c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/iostream
:40,
from a9.cpp:3:
c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/bits/stl_function.h:
In member
function ‘bool std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _
Tp = Record]’:
c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/bits/stl_tree.h:1267:4:
inst
antiated from ‘std::pair, bool> std::_Rb_tree<_Key,
_Val, _KeyOfValue, _Compare, _Alloc>::_M_insert_unique(const _Val&) [with _Key
= Record, _Val = Record, _KeyOfValue = std::_Identity, _Compare = std::l
ess, _Alloc = std::allocator]’
c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/bits/stl_set.h:410:29:
insta
ntiated from ‘std::pair,
_Compare, typename _Alloc::rebind<_Key>::other>::const_iterator, bool> std::set
<_Key, _Compare, _Alloc>::insert(const value_type&) [with _Key = Record, _Compar
e = std::less, _Alloc = std::allocator, typename std::_Rb_tree<_
Key, _Key, std::_Identity<_Key>, _Compare, typename _Alloc::rebind<_Key>::other>
::const_iterator = std::_Rb_tree_const_iterator, std::set<_Key, _Compare
, _Alloc>::value_type = Record]’
a9.cpp:72:28: instantiated from here
c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/bits/stl_function.h:236:22:
er
ror: no match for ‘operator<‘ in ‘__x < __y’
c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/bits/stl_function.h:236:22:
no
te: candidates are:
c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/bits/stl_pair.h:207:5:
note: t
emplate bool std::operator<(const std::pair<_T1, _T2>&, co
nst std::pair<_T1, _T2>&)
c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/bits/stl_iterator.h:291:5:
not
e: template bool std::operator<(const std::reverse_iterator<_It
erator>&, const std::reverse_iterator<_Iterator>&)
c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/bits/stl_iterator.h:341:5:
not
e: template bool std::operator<(const std::r
everse_iterator<_IteratorL>&, const std::reverse_iterator<_IteratorR>&)
c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/bits/basic_string.h:2510:5:
no
te: template bool std::operator<(cons
t std::basic_string<_CharT, _Traits, _Alloc>&, const std::basic_string<_CharT, _
Traits, _Alloc>&)
c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/bits/basic_string.h:2522:5:
no
te: template bool std::operator<(cons
t std::basic_string<_CharT, _Traits, _Alloc>&, const _CharT*)
c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/bits/basic_string.h:2534:5:
no
te: template bool std::operator<(cons
t _CharT*, const std::basic_string<_CharT, _Traits, _Alloc>&)
c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/bits/stl_vector.h:1290:5:
note
: template bool std::operator<(const std::vector<_Tp, _
Alloc>&, const std::vector<_Tp, _Alloc>&)
c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/bits/stl_list.h:1593:5:
note:
template bool std::operator<(const std::list<_Tp, _Allo
c>&, const std::list<_Tp, _Alloc>&)
c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/bits/stl_tree.h:856:5:
note: t
emplate
bool std::operator<(const std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _All
oc>&, const std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>&)
c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/bits/stl_set.h:713:5:
note: te
mplate bool std::operator<(const std::
set<_Key, _Compare, _Alloc>&, const std::set<_Key, _Compare, _Alloc>&)
c:\mingw\bin../lib/gcc/mingw32/4.6.2/include/c++/bits/stl_multiset.h:696:5:
not
e: template bool std::operator<(const
std::multiset<_Key, _Compare, _Alloc>&, const std::multiset<_Key, _Compare, _All
oc>&)
当我创建一个s和s.insert时插入工作正常(1)
要编译此代码需要做什么?
提前致谢.
解决方法:
你需要重载运算符< :
类似以下内容:
bool operator<(const Record& rhs) const
{
return a < rhs.a; //assume that you compare the record based on a
}
原因是STL集维护元素的顺序. std :: set支持指定比较函数.默认值小于将使用运算符<检查平等. 同时,你必须结束你的课程定义;否则,编译错误.
class Record
{
int a, b, c;
public:
//getters and setters
Record(){a = -1; b = -1; c = -1;};
}; //<---Cannot miss this ;