主要是记录一下下面的代码的关键点,

#include "../../headers/bookheaders.h"

using namespace std;

struct Greater_than {
    int val;
    Greater_than(int v) : val{v} {}
    bool operator()(const pair<string, int>& r) { return r.second > val; }
};

void f(map<string, int>& m) {
    auto p = find_if(m.begin(), m.end(), Greater_than(42));
    // cout << p == m.end() << '\\n';
    if (p != m.end()) {
        cout << p->first << '\\t' << p->second << '\\n';
    }

    int cxx = count_if(m.begin(), m.end(), [](const pair<string, int>& r) { return r.second > 42; });
    cout << cxx << '\\n';
}

int main(int argc, char const* argv[]) {
    map<string, int> m = {{"what", 12}, {"is", 34}, {"your", 56}, {"name", 78}, {"aaa", 88}};
    f(m);
    return 0;
}
aaa     88
3

一,关于 find_if() ,它的返回值是容器中第一个满足谓词的条件的元素的迭代器,上面的代码运行结果之所以看上去是返回了最后一个结果,但是,实际上,map 的中的元素默认是已经排好序的,而 “aaa” 恰好是排在了第一个位置。

二,p 可以和 m.end() 进行比较,但是不可以打印。

三,m.end() 可以用 end(v) 来代替,begin 也是同理。

参考: https://en.cppreference.com/w/cpp/algorithm/find