gpt4 book ai didi

c++ - operator< 用于列表排序

转载 作者:行者123 更新时间:2023-11-30 00:54:48 24 4
gpt4 key购买 nike

我有一个简单的 Position 结构:

struct Position
{
int x;
int y;
};

我还有一个职位列表:

std::list<Position> positons;

我正在尝试使用 list::sort() 对列表进行排序,并且需要为 Positions 对象定义 operator<。我试着保持简单,创​​建如下内容:

bool operator<(const Position& one, const Position& two)
{
return one.x < two.x && one.y < two.y;
}

但这行不通。我如何确定一个类/结构对象作为一个整体小于另一个?我将如何为我的 Position 结构做这件事?

编辑 当我调用 positions.sort() 时,我得到一个调试断言失败,它说:表达式:无效运算符<

最佳答案

您当前的定义未建立 strict weak order .尝试类似的东西:

bool operator<(const Position& one, const Position& two)
{
return std::tie(one.x, one.y) < std::tie(two.x, two.y);
}

这使用 std::tie创建两个 std::tuple<int const&, int const&>包含对 x 的引用的对象和 y one 的元素和 two , 然后使用 operator< 比较两个元组(执行 lexicographical comparison )。

std::tie需要 C++11,但使用 boost::tuple 可以获得类似的结果.

关于c++ - operator< 用于列表排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13506757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com