STL sort() 的重载" < "

Overloading " < " for STL sort()

本文关键字:lt 重载 sort STL      更新时间:2023-10-16

我制作了一个包含两个长整型变量的结构,比如xy

我可以通过重载<运算符并基于任何一个变量对进行排序来使用STL sort()

struct point
{
    long long int x, y;
};
bool compare(point lhs, point rhs)
{    
    return lhs.x < rhs.x;
}
sort(point, point + t, compare);

我想做的是基于x对结构进行排序,但当两个bucket具有相同的x值时,应该首先放置y值较小的bucket。我怎样才能做到这一点?

比较xy的元组:

bool compare(point lhs, point rhs)
{    
    return std::tie(lhs.x, lhs.y) < std::tie(rhs.x, rhs.y);
}

这正是你想要的。

std::tie的参考页面甚至有一个与您正在做的事情基本相同的例子。

这正是你所说的:

bool compare(point lhs, point rhs)
{    
    return (lhs.x == rhs.x)
         ? (lhs.y < rhs.y)
         : (lhs.x < rhs.x);
}

此外,std::sort()的比较器应采用常量左值引用:

bool compare(point const& lhs, point const& rhs);
inline bool compare(const point& lhs, const point& rhs)
{    
   if (lhs.x < rhs.x)
       return true;
   if (lhs.x > rhs.x)
       return false;
   return lhs.y < rhs.y;
}