map按value值查找——find_if的使用(转载)

转载:http://www.cnblogs.com/xufeiyang/archive/2012/05/09/2491871.html

CValueFind

 1 #ifndef _CVALUEFIND_H_
 2 #define _CVALUEFIND_H_
 3 #include <string>
 4 #include <algorithm>
 5 #include <map>
 6 
 7 
 8 class map_value_finder
 9 {
10 public:
11     map_value_finder(const std::string &cmp_string):m_s_cmp_string(cmp_string){}
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 #endif

main

#include <iostream>
#include <windows.h>
#include <vector>
#include "CValueFind.h"
using namespace std;
//map按value值查找——find_if的使用

int main()
{
    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(31, "english"));
    my_map.insert(std::make_pair(32, "english"));
    my_map.insert(std::make_pair(33, "english"));
    my_map.insert(std::make_pair(34, "english"));
    my_map.insert(std::make_pair(35, "english"));
    my_map.insert(std::make_pair(36, "english"));
    my_map.insert(std::make_pair(37, "english"));
    my_map.insert(std::make_pair(38, "english"));
    my_map.insert(std::make_pair(39, "english"));
    my_map.insert(std::make_pair(40, "hongkong")); 

    std::map<int, std::string>::iterator it = my_map.end();
    it = std::find_if(my_map.begin(), my_map.end(), map_value_finder("english"));
    if (it == my_map.end())
        printf("not found
");       
    else
    {
        printf("found key:%d value:%s
", it->first, it->second.c_str());
    }
    getchar();

    return 0;
}
原文地址:https://www.cnblogs.com/chechen/p/4111192.html