vendredi 17 avril 2015

c++11 using lambda sort vector keeping track of indices

I have tried to apply this solution using c++11 (I am using gcc-4.8.2)





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

using namespace std;

vector<size_t> sort_indexes(const vector<float> &v) {

vector<size_t> idx(v.size());
for (size_t i = 0; i != idx.size(); ++i) idx[i] = i;

sort(idx.begin(), idx.end(),
[&v](size_t i1, size_t i2) {return v[i1] < v[i2];});

return idx;
}

int main () {

std::vector<float> w(4, 0.2f);
w.push_back(0.3f);

std::vector<size_t> idx = sort_indexes(w);

// print out content:
std::cout << "ordering:";
for (std::vector<size_t>::iterator it=idx.begin(); it!=idx.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';

return 0;
}



but I get a compiling error saying:


error: no matching function for call to ‘sort(std::vector::iterator, std::vector::iterator, sort_indexes(const std::vector&)::__lambda0)’ [&v](size_t i1, size_t i2) {return v[i1] < v[i2];});


error: template argument for ‘template void std::sort(_RAIter, _RAIter, _Compare)’ uses local type ‘sort_indexes(const std::vector&)::__lambda0’


I would appreciate any help :-)


Aucun commentaire:

Enregistrer un commentaire