使用自定义运算符<使用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<<