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
需要注意的一件重要事情(我最近发现)是,如果您的编译器开始抱怨您重新定义了
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;
    }
}