C++11 lambda简化的代码

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
struct Person
{
    string name;
    int age;
};
//分别通过functor和lambda实现排序和查找
void fun()
{
    vector<Person> vp;
    Person p{"张三", 38};
    vp.push_back(p);
    struct CmpName
    {
        bool operator () (const Person &p1, const Person &p2){return p1.name<p2.name;}
    };
    sort(vp.begin(), vp.end(), CmpName());
    int n;
    cin>>n;
    struct CmpAge
    {
        CmpAge(int n):ageFind(n){}
        int ageFind;
        bool operator()(const Person &p){return p.age==ageFind;}
    };
    cout << find_if(vp.begin(), vp.end(), CmpAge(n))->name;
}
//可见lambda还是很方便的。 
void fun_lambda()
{
    vector<Person> vp;
    Person p{"张三", 38};
    vp.push_back(p);
    sort(vp.begin(), vp.end(), [](const Person &p1, const Person &p2){return p1.name<p2.name;});
    int n;
    cin >> n;
    cout << find_if(vp.begin(), vp.end(), [n](const Person &p){return p.age == n;})->name;
}
int main()
{ 
    //输入非38的数字程序崩溃
    fun();
}

PS1:看问题要一分为二辩证地看,C++11搞一大堆复杂的特性还是有点有用的。

PS2:可能有人认为我不会或者学不会C++,或者认为他们自己学会C++就了不起,其实我只是懒得浪费时间而已——三张一块一张五块就凑成八块了,没必要印一张面额是八块的。工具本身没难度,也不应该有难度,因为工具要解决的问题永远比工具本身难。

PS3:在此提个问题,假设已经按照age字段排好序,如何使用标准库的二分查找算法替换find_if?

你可能感兴趣的:(C++11 lambda简化的代码)