如何用lambdasorting?
sort(mMyClassVector.begin(), mMyClassVector.end(), [](const MyClass & a, const MyClass & b) { return a.mProperty > b.mProperty; });
我想使用lambda函数来sorting自定义类,而不是绑定实例方法。 但是,上面的代码产生错误:
错误C2564:'const char *':一个函数式转换为内置types只能带一个参数
它适用于boost::bind(&MyApp::myMethod, this, _1, _2)
。
得到它了。
sort(mMyClassVector.begin(), mMyClassVector.end(), [](const MyClass & a, const MyClass & b) -> bool { return a.mProperty > b.mProperty; });
我认为它会发现>运算符返回一个布尔(每个文档)。 但显然情况并非如此。
问题可以用“a.mProperty> b.mProperty”行吗? 我已经得到了下面的代码工作:
#include <algorithm> #include <vector> #include <iterator> #include <iostream> #include <sstream> struct Foo { Foo() : _i(0) {}; int _i; friend std::ostream& operator<<(std::ostream& os, const Foo& f) { os << f._i; return os; }; }; typedef std::vector<Foo> VectorT; std::string toString(const VectorT& v) { std::stringstream ss; std::copy(v.begin(), v.end(), std::ostream_iterator<Foo>(ss, ", ")); return ss.str(); }; int main() { VectorT v(10); std::for_each(v.begin(), v.end(), [](Foo& f) { f._i = rand() % 100; }); std::cout << "before sort: " << toString(v) << "\n"; sort(v.begin(), v.end(), [](const Foo& a, const Foo& b) { return a._i > b._i; }); std::cout << "after sort: " << toString(v) << "\n"; return 1; };
输出是:
before sort: 83, 86, 77, 15, 93, 35, 86, 92, 49, 21, after sort: 93, 92, 86, 86, 83, 77, 49, 35, 21, 15,
对于很多代码,你可以像这样使用它:
#include<array> #include<functional> int main() { std::array<int, 10> vec = { 1,2,3,4,5,6,7,8,9 }; std::sort(std::begin(vec ), std::end(vec ), [](int a, int b) {return a > b; }); for (auto item : vec) std::cout << item << " "; return 0; }
将“vec”replace为你的类,就是这样。