【发布时间】:2021-05-06 04:13:42
【问题描述】:
我想对一个向量进行排序,它的元素是一个包含三个字段的对象。
我可以通过以下代码比较一个字段,
std::sort(std::execution::par, pidx.begin(), pidx.end(), [&P](int i, int j) {
return P[i].obj[0]<P[j].obj[0];
}
);
但是在比较多个字段时,它会因运行时错误而失败。
std::sort(std::execution::par, pidx.begin(), pidx.end(), [&P](int i, int j) {
for (int k = 0; k < 3; k++)
if (P[i].obj[k] < P[j].obj[k])
return true;
return false;
}
);
运行时错误如下,
调试断言失败!
文件 C:\Program Files(x86)\Microsoft Visual Studio2019\Community\VC\Tools\MSVC\14.28.22910\inclue\xutility
行:1626
表达式:无效的比较器
有关您的程序如何导致断言失败的信息,请参阅关于断言的可视 C++ 文档。
感谢您的帮助。
【问题讨论】:
-
什么是
P?什么是例如P[i]?P[i].obj是什么?请尝试创建minimal reproducible example 向我们展示。 -
抱歉信息不清楚。 P 是对象的向量。 P[i] 和 P[j] 是 P 的两个元素。pidx 是另一个整数向量,它存储了 P 元素的索引。
标签: c++ sorting lambda compare