- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
find_if仿函数的使用
有时我们要在map、vector容器中查找符合条件的记录,map提供一个find的成员函数,但也仅限于查找关键字满足条件的记录,不支持值域的比较。如果我们要在值域中查找记录,该函数就无能无力了。而vector甚至连这样的成员函数都没有提供。所以一般情况下进行值域的查找,要么自己遍历数据,要么求助于STL的find_if函数。前种方法我们这里就不赘述了,只讲find_if函数。
1 -- find_if的STL定义
template class InputIterator, class Predicate InputIterator find_if InputIterator first, InputIterator last,Predicate pred while first ! last !pred *first ++first; return first; find_if是一个模板函数,接受两个数据类型:InputItearator迭代器,Predicate用于比较数值的函数或者函数对象(仿函数)。find_if对迭代器要求很低,只需要它支持自增操作即可。当前遍历到的记录符合条件与否,判断标准就是使得pred 为真。至此可能还有些不是很明了,下面举几个例子实际操练下的它的用法。
2 -- find_if在std::map查找时的应用
假如我们有个map对象是这么声明的:
std::map int, std::string my_map;my_map.insert std::make_pair 10, china ;my_map.insert std::make_pair 20, usa ;my_map.insert std::make_pair 30, english ;my_map.insert std::make_pair 40, hongkong ;
插入值后我们想得到值为”english”的这条记录,要怎样写程序呢?下面是个范例参考下:
1? #include? 2? #include? 3 4? class?map_finder 5 6? public: 7 map_finder const?std::string?cmp_string :m_s_cmp_string cmp_string 8 bool?operator? const?std::map int,?std::string ::value_type?pair 9 10 return?pair.second? ?m_s_cmp_string; 11 12? private: 13 const?std::string?m_s_cmp_string; 14? ; 15 16? int?main 17 18 std::map int,?std::string ?my_map; 19 my_map.insert std::make_pair 10,?china ; 20 my_map.insert std::make_pair 20,?usa ; 21 my_map.insert std::make_pair 30,?english ; 22 my_map.insert std::make_pair 40,?hongkong ; 23 24 std::map int,?std::string ::iterator?it? ?my_map.end ; 25 it? ?std::find_if my_map.begin ,?my_map.end ,?map_finder english ; 26 if? it? ?my_map.end 27 printf not?found\n ; 28 else 29 printf found?key:%d?value:%s\n,?it- first,?it- second.c_str ; 30 31 return?0; 32 class map_finder即用于比较的函数对象,它的核心就是重载的 运算符。因为每个容器迭代器的*运算符得到的结果都是该容器的value_type值,所以该运算符的形参就是map迭代器指向的value_type类型的引用。而map的value_type到底是什么类型,就得看下STL的源代码是如何定义的。
template class Key, class T, class Compare less , class Alloc alloc class map public:typedef Key key_type;typedef pair const Ke
文档评论(0)