sort()和stable_sort()中比较器的要求之间的差异

时间:2017-12-01 06:12:59

标签: c++

如果我将lambda作为参考参数传递给sort算法,那么它正在运行。但是当我将相同的lambda传递给stable_sort时,它没有编译,我必须声明参数const?为什么会这样?

// sort algorithm example
#include <iostream>     // std::cout
#include <algorithm>    // std::sort
#include <vector>       // std::vector

using namespace std;

void print(std::vector<int> &vec)
{
    for (auto i : vec)
    {
        cout << i << " ";
    }
    cout << endl;
}

int main() {
    std::vector<int> myvector = { 32, 71, 12, 45, 26, 80, 53, 33 };

    sort(myvector.begin(), myvector.end(), [](int &i, int &j)//working
    {
        return i < j;
    });

    stable_sort(myvector.begin(), myvector.end(), [](int &i, int &j)//not compiling
    {
        return i < j;
    });

    stable_sort(myvector.begin(), myvector.end(), [](const int &i, const int &j)//compiling
    {
        return i < j;
    });

    print(myvector);

    return 0;
}

1 个答案:

答案 0 :(得分:0)

  

[Bug libstdc++/82891] stable_sort() won't compile with function object that takes parameters by non-const reference

     

现在有一个LWG问题提交请求等待发布   这个。我将在添加后返回。

GCC和LLVM都存在问题,但他们等待{sup> [3] 请求Library Working Group更改标准。