我正在尝试在c ++中使用我的地图结构。结构很简单:
struct index{
int x;
int y;
int z;
bool operator<(const index &b){
bool out = true;
if ( x == b.x ){
if ( y == b.y ){
out = z < b.z;
} else out = y < b.y;
} else out = x < b.x;
return out;
}
};
但是当我编译时,我得到一个错误:
/usr/lib/gcc/x86_64-redhat-linux/4.1.2 /../../../../ include / c ++ / 4.1.2 / bits / stl_function.h:在成员函数中bool std :: less&lt; _Tp&gt; :: operator()(const _Tp&amp;,const _Tp&amp;)const [with _Tp = membrane :: index]': /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_map.h:347: 从'_Tp&amp; std :: map&lt; _Key,_Tp,_Compare, _Alloc&gt; :: operator [](const _Key&amp;)[with _Key = membrane :: index,_Tp = std :: set,std :: less&gt;, std :: allocator&gt; &gt;,_比较= std :: less,_Alloc = std :: allocator, std :: less&gt;,std :: allocator&gt;
]” memMC.cpp:551:从这里实例化
据我所知,这意味着我需要重载()运算符。但是我不知道这个操作员通常做什么,所以我不知道如何正确覆盖它。维基百科告诉我,这是一个演员,但我不认为他们会回归布尔...
第一次尝试使用[]运算符访问地图元素时,编译器会崩溃。
答案 0 :(得分:10)
尝试进行比较const:
struct index{
int x;
int y;
int z;
bool operator<(const index &b) const
//^^^^^ Missing this,
答案 1 :(得分:4)
尝试免费过载:
bool operator < (const index &a, const index &b)
{
if (a.x == b.x)
{
if (a.y == b.y)
{
return a.z < b.z;
}
else
{
return a.y < b.y;
}
}
else
{
return a.x < b.x;
}
}