使用自定义运算符<使用std :: less时出错

我试图超载<运营商,但遇到问题。

这是我的实现:

int Vector3D::operator < (const Vector3D &vector)
{
   if(x<vector.x)
       return 1;
   else
       return 0;
}

我使用下面的代码调用它:

std::map<Vector3D, std::vector<const NeighborTuple *> > position; 
std::set<Vector3D> pos; 
for (NeighborSet::iterator it = N.begin(); it != N.end(); it++)
{
    NeighborTuple const  &nb_tuple = *it;

    Vector exposition;
    pos.insert (exposition);
    position[exposition].push_back (&nb_tuple);
}

但是我得到这个错误:

/usr/include/c++/4.1.2/bits/stl_function.h:在成员函数'bool std :: less <_Tp> :: operator()(const _Tp&,const _Tp&)const [with _Tp = ns3 :: Vector3D ]“:
/usr/include/c++/4.1.2/bits/stl_map.h:347:从_Tp&std :: map <_Key,_Tp,_Compare,_Alloc> ::运算符[](const _Key&)[使用_Key = ns3 :: Vector3D,_Tp = std :: vector <const ns3 :: olsr :: NeighborTuple *,std :: allocator <const ns3 :: olsr :: NeighborTuple *>>,_Compare = std :: less <ns3 :: Vector3D> ,_Alloc = std :: allocator <std :: pair <const ns3 :: Vector3D,std :: vector <const ns3 :: olsr :: NeighborTuple *,std :: allocator <const ns3 :: olsr :: NeighborTuple *>> >>]'
../src/routing/olsr/olsr-routing-protocol.cc:853:从这里实例化
/usr/include/c++/4.1.2/bits/stl_function.h:227:error:将'const ns3 :: Vector3D'作为'int'的参数'ns3 :: Vector3D :: operator <(const ns3 :: Vector3D&)'丢弃限定符


错误

将'const ns3 :: Vector3D'传递为'int ns3 :: Vector3D :: operator <(const ns3 :: Vector3D&)'的'this'参数会丢弃限定符

表明您的operator<不承诺比较不会修改左侧参数,而映射要求比较操作不应修改任何内容,并试图将此操作符用于常量实例(映射将键类型存储为const对象)。

简而言之,这样的运算符重载不能改变任何东西,并且两个运算数都必须声明为const。 正如你已经将它重载为一个成员函数一样,你必须使该函数本身为const。

bool operator<(const ns3::Vector3D& rhs) const;

顺便说一句,为什么你不返回一个布尔(结果必须是真或假)?


看起来你需要使用const_iterators:

NeighborSet:迭代

应该

NeighborSet ::为const_iterator

此外,如果您的编译器支持它(C ++ 0x)使用cbegin和cend而不是开始和结束。

链接地址: http://www.djcxy.com/p/73077.html

上一篇: Error using custom operator< with std::less

下一篇: std::endl is of unknown type when overloading operator<<