【问题标题】:How to pass parameter to sort's compare function?如何将参数传递给排序的比较函数?
【发布时间】:2020-07-10 10:36:34
【问题描述】:

我想用这个对向量 v 进行排序

std::sort(v.begin(),v.end(),cmpr);

我的 cmpr 函数在哪里

bool cmpr(int a,int b, int c) 
{
     return a%c <= b%c;
}

现在我想知道如何通过 c?

【问题讨论】:

  • 你在找std::bind
  • 如前所述,您可以使用std::bind,或创建一个functor object,并将c 作为在构造时初始化的成员。您也可以使用lambda expression
  • 即使您的代码可以工作,您的比较函数也不会遵循strict-weak-ordering,因为您返回truefalse 以获取相等的a 和@987654333 值@。所以你也需要解决这个问题。

标签: c++ sorting vector stl


【解决方案1】:

您可以使用lambda 来包装您的比较器。一个完整的例子:

#include <algorithm>
#include <iostream>

auto make_cmpr(int c)
{
    return [c](int a, int b) {
        return a%c <= b%c;
    };
}

int main()
{
    int a[5] = {2, 4, 1, 3, 5};
    std::sort(a, a + 5, make_cmpr(3));

    /* or directly
    int c = 3;
    std::sort(a, a + 5, 
        [c](int a, int b) {
            return a%c <= b%c;
        }
    );
    */

    for (int e : a) std::cout << e << ' ';
}

【讨论】:

    猜你喜欢
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    相关资源
    最近更新 更多