使用 C++ 排序比较多个字段的 Lambda 表达式

问题描述

我想对一个向量进行排序,它的元素是一个包含三个字段的对象。

我可以通过以下代码比较一个字段,

    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,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++ 文档。

感谢您的帮助。

解决方法

我找到了解决办法,比较lambda函数不正确。


    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 P[i].obj[k] < P[j].obj[k];
        return false;
        }
    );