主要是记录一下下面的代码的关键点,
#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
也是同理。