lundi 25 septembre 2017

C++11 Lambda custom comparator slows down sorting

Custom lambda Comparator slower than normal function c++11. I experienced this a few times. But, Still Couldn't figure out the reason why this is so. Does anyone experience this and know the cause behind it?

    #include <bits/stdc++.h>
    using namespace std;

    const int N = 1e4 + 1;
    vector<int> v(N);
    vector<int> sorted(N);
    map<int, int> counts;
    long long start;

    void startClock() {
        start = clock();
    }

    void stopClock() {
        cout << float( clock () - start ) /  CLOCKS_PER_SEC << endl;
    }

    void copyOriginal() {
        for (int i = 0; i < N; ++i)
            sorted[i] = v[i];
    }

    void sortWLambda(map<int, int>& counts) {
        cout << "sorting with lambda" << endl;
        sort(sorted.begin(), sorted.end(), [counts](const int& a, const int& b) {
            if (*counts.find(a) != *counts.find(b)) return *counts.find(a) < *counts.find(b);
            return a < b;
        });
    }

    bool comparator(const int& a, const int& b) {
        if (*counts.find(a) != *counts.find(b)) return *counts.find(a) < *counts.find(b);
        return a < b;
    }

    void sortWoLambda() {
        cout << "sorting w/o lambda" << endl;
        sort(sorted.begin(), sorted.end(), comparator);
    }

    int main() {
        for (int i = 0; i < N; ++i) {
            int num = rand() % 1234;
            counts[num]++;
            v[i] = num;
        }

        copyOriginal();
        startClock();
        sortWLambda(counts);
        stopClock();

        copyOriginal();
        startClock();
        sortWoLambda();
        stopClock();

        return 0;
    }

sorting with lambda 6.28 sec

sorting w/o lambda 0.17 sec

Aucun commentaire:

Enregistrer un commentaire