我想在 std::map 构造的时候直接使用 Lambda 表达式指定排序方式, 但是编译器报错了
class Person {
public:
std::string name;
int age;
Person(const std::string & n , int a) {
name = n;
age = a;
}
class Compare {
public:
bool operator()(const Person & lhs, const Person & rhs) {
return lhs.age < rhs.age;
}
};
};
auto lambda = [](const Person & lhs, const Person & rhs){
return lhs.age < rhs.age;
};
auto wapper = [lambda]() {
return lambda;
};
bool a = Person::Compare()(Person("p1", 1), Person("p2", 2));
bool b = wapper()(Person("p1", 1), Person("p2", 2));
// Success
std::set<Person, Person::Compare> sp;
// E: Template argument for template type parameter must be a type
std::set<Person, wapper> sp;
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.