Chinaunix首页 | 论坛 | 博客
  • 博客访问: 462780
  • 博文数量: 80
  • 博客积分: 2301
  • 博客等级: 大尉
  • 技术积分: 884
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-16 20:07
个人简介

I\'m interested in mathematics and Daoism. Welcome to talk about these subjects with me.

文章分类

全部博文(80)

文章存档

2017年(2)

2016年(16)

2015年(4)

2014年(6)

2013年(22)

2012年(2)

2011年(1)

2010年(4)

2009年(20)

2008年(2)

2007年(1)

我的朋友

分类: C/C++

2016-03-16 15:59:30


点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <algorithm>
  3. #include <string>
  4. #include <map>

  5. using namespace std;

  6. class map_finder
  7. {
  8.     public:
  9.         map_finder(const std::string &cmp_string) : m_s_cmp_string(cmp_string)
  10.         {
  11.         }

  12.         bool operator ()(const std::map<int, std::string>::value_type &pair)
  13.         {
  14.             return pair.second == m_s_cmp_string;
  15.         }
  16.     private:
  17.         const std::string &m_s_cmp_string;
  18. };

  19. int main()
  20. {
  21.     std::map<int, std::string> my_map;
  22.     my_map.insert(std::make_pair(10, "china"));
  23.     my_map.insert(std::make_pair(20, "usa"));
  24.     my_map.insert(std::make_pair(30, "english"));
  25.     my_map.insert(std::make_pair(40, "hongkong"));

  26.     std::map<int, std::string>::iterator it = my_map.end();
  27.     bool use_ordinary_styl = false;
  28.     if (use_ordinary_styl)
  29.     {
  30.         it = std::find_if(my_map.begin(), my_map.end(), map_finder("english"));
  31.     }
  32.     else
  33.     {
  34.         it = std::find_if(my_map.begin(), my_map.end(), [](const std::map<int, std::string>::value_type &obj ){
  35.                 return (obj.second == "english");
  36.                 });
  37.     }

  38.     if (it == my_map.end())
  39.         printf("not found\n");
  40.     else
  41.         printf("found key : %d value : %s\n", it->first, it->second.c_str());

  42.     return 0;
  43. }
第39行处,find_if的第三个参数,应该是一个函数对象,也是可以使用lambda表达式。注意lambda表达式的参数是std::map<int, std::string>里面是value_type类型。查阅头文件知道模板类中的value_type是使用typedef定义的。
如果容器是vector,那么find_if第三个参数那个lambda表达式的参数也是相应容器的value_type类型。

编译命令:
 clang++   -std=c++0x ./main.cpp
阅读(1434) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~