STL sort() 的重载" < "
Overloading " < " for STL sort()
我制作了一个包含两个长整型变量的结构,比如x
和y
。
我可以通过重载<
运算符并基于任何一个变量对进行排序来使用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。我怎样才能做到这一点?
比较x
和y
的元组:
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;
}
相关文章:
- C++重载<<具有typedef'd std::vector
- 重载运算符<<:此运算符函数的参数太多
- 在VS 2012上编译,但不使用Netbeans/MinGW-重载<<
- 重载运算符<<用于模板类.即使使用好友关键字也无法获得私人会员
- C++分离成员流重载<<
- 我已经完成了<<运算符重载,但它'It’不起作用
- 重载运算符<<输出地址而不是数据成员
- 重载运算符<<用于ostream语法
- 重载operator< & lt;作为会员打印
- Operator< & lt;重载隐藏其他
- 重载& lt; & lt;为什么我得到以下错误
- 重载ostream&时转换错误无效;operator< & lt;
- operator< & lt;在c++中为类中的类重载
- 重载& lt; & lt;用于打印自定义异常的操作符
- 重载<<运算符错误C2804:二进制'运算符<<'参数太多
- 上Ostream & lt; & lt;重载的困惑
- 重载& lt; & lt;为了我的班级
- 使用带有重载<<endl上的运算符
- 重载& lt; & lt;使用命名空间std
- operator< & lt;重载、名称空间和模板