C++ C++;映射键排序比较函数?
我有一个重载所有比较运算符的类。我将这些对象作为键加载到地图中,我希望地图将它们从最小排序到最大排序C++ C++;映射键排序比较函数?,c++,stl,map,C++,Stl,Map,我有一个重载所有比较运算符的类。我将这些对象作为键加载到地图中,我希望地图将它们从最小排序到最大排序 然而,地图实际上是按从大到小排序的。为什么会这样?在对地图进行排序时,是否不使用键上的比较运算符?我如何才能做到这一点?您应该发布实现比较运算符重载的代码,因此答案可能基于猜测: 你的问题可能是一个简单的打字错误(我曾经这样做过) bool运算符
然而,地图实际上是按从大到小排序的。为什么会这样?在对地图进行排序时,是否不使用键上的比较运算符?我如何才能做到这一点?您应该发布实现比较运算符重载的代码,因此答案可能基于猜测: 你的问题可能是一个简单的打字错误(我曾经这样做过)
bool运算符<(左、右)常量
{
返回rhs
但实际上你想要:
bool operator < ( T lhs, T rhs ) const
{
return lhs < rhs;
}
bool运算符<(左、右)常量
{
返回左侧<右侧;
}
如果查看std::map的定义,第三个参数是比较器-std::less
。它的默认实现只是调用操作符
{
布尔运算符()(
const YourType&lhs,
const YourType和rhs)
{
如果(!(左侧成员1<右侧成员1))
{
返回false;
}
如果(!(左侧成员2<右侧成员2))
{
返回false;
}
返回true;
}
}
记得在你的班上交朋友std::less
实际测试必须符合以下要求,否则会出现各种问题:
- lhs
- rha
- lhs
- rha
std::less
的含义或其他古怪的事情,那么可能是您在声明std::map
时只向前声明了YourType
希望这有帮助 请发布代码,在没有看到代码的情况下回答是不可能的。
std::map
默认使用operator您如何检查订单?您能否手工检查预期的订购情况,例如cout
bool operator < ( T lhs, T rhs ) const
{
return lhs < rhs;
}
template<> std::less< YourType >
{
bool operator()(
const YourType& lhs,
const YourType& rhs)
{
if(!(lhs.member1 < rhs.member1))
{
return false;
}
if(!(lhs.member2 < rhs.member2))
{
return false;
}
return true;
}
}