【发布时间】:2019-04-25 20:30:22
【问题描述】:
假设您有一些较旧的代码和数据结构:
struct TEST
{
int a;
int b;
};
TEST *items[9]; // Points to an array of TEST*
现在我想对这些对象进行排序。旧代码使用 QSort,但我想使用 std::sort。这会是什么样子?
我尝试了类似的方法:
typedef std::function<bool(const TEST *, const TEST*)> TestCompareType;
TEST **items;
std::sort(items, items+size,
[](const TEST *p1, const TEST *p2)
{
if(p1->a == p2->a)
{
return p1->b < p2->b;
}
else
{
// Ooops! Forgot to put "return here"
p1->a < p2->a;
// This would fix it
// return p1->a < p2->a;
}
});
但我收到一个提示“表达式:无效比较器”的崩溃
有什么想法吗?
更新:我完全认为错误与使用带有指针数组的 std::sort 有关。我用更接近我所拥有的代码替换了示例代码。发现我有一个错字。在比较器的所有情况下,我都没有返回。
【问题讨论】:
-
但我得到一个崩溃,说比较功能不好。确切的错误信息是什么? (另外我希望您的实际应用程序中有更多代码,因为
items没有初始化。请制作一个MVCE -
请编辑您的问题以包含minimal reproducible example
-
typedef不需要且未使用。 -
您的
std::sort行似乎正确(假设指针不是nullptr、items和size已正确初始化)。 -
我的蜘蛛侠感觉刺痛并告诉我,您使用的实际排序 lambda 不起作用(并且尚未发布),尝试对 和 进行排序b 但不能完美地使用严格的弱排序。但这显然是一个猜测,因为您还没有向我们展示 MCVE。