如何通过参数传递排序的比较功能?

问题描述 投票:2回答:1

我想使用此对向量v排序

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

我的cmpr函数在哪里

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

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

c++ sorting vector stl
1个回答
3
投票

您可以使用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 << ' ';
}

-3
投票

尽管如此,您无法将直接c传递给该函数,因为std:sort function的第三个参数只是一个指针函数。但是您可以尝试这样:

class YourOpe{
    int c;
    public:
    YourOpe(int cc){ c = cc; }

    bool yourOperator()(int a, int b) const {
    return cmpr( a , b , c);
    }
};

因此,您可以:std::sort(v.begin(),v.end(), (new YourOpe(c)).yourOperator);

© www.soinside.com 2019 - 2024. All rights reserved.