map进行字符串的查找

来源:互联网 发布:手机财经软件 编辑:程序博客网 时间:2024/06/15 15:57

本文是基于map的key和value进行数据的存放两组数据分别是krc_keyvalue和krc_keyvalue1。并对krc_keyvalue中的value值在krc_keyvalue1中的value值进行查找,如果krc_keyvalue1中找到krc_keyvalue中相同的value,则打印find it,否则打印not found。

由于map中的find成员函数只能对key进行查找,而不能对value进行查找,所以在使用find_if进行value的查找时需要进行操作符的重载。当然,在实际使用过程中如果方便就采用find函数进行key的查找。

1、进行value的查找

代码如下:

#include <stddef.h>#include <iostream>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string>#include <tr1/functional>#include <time.h>#include <map>#include <algorithm>//using namespace std;#define BITWORD 32#define ARRNUM 100int mmin = 10000000;int mmax = 99999999;int N = (mmax-mmin+1);#define  BITS_PER_WORD 32#define WORD_OFFSET(b) ((b) / BITS_PER_WORD)#define BIT_OFFSET(b)  ((b) % BITS_PER_WORD)void SetBit(int *words, int n){    n -= mmin;    words[WORD_OFFSET(n)] |= (1 << BIT_OFFSET(n));} void ClearBit(int *words, int n){    words[WORD_OFFSET(n)] &= ~(1 << BIT_OFFSET(n));} int GetBit(int *words, int n){     int bit = words[WORD_OFFSET(n)] & (1 << BIT_OFFSET(n));     return bit != 0;}//times33算法,它是一个字符串hash //”ret = ret << 5 + ret + str;”这句话,其实就是ret33 + *str 的意思,左移5位,相当于乘以32,这样做的目的是充分利用硬件的计算速度。 int times33(char *str)  {    int ret = 0;    while(*str)    {        ret = ret <<5 + ret + *str;    }    return ret; } class map_value_finder { public:        map_value_finder(const std::string &cmp_string):m_s_cmp_string(cmp_string){}        bool operator ()(const std::map<int, std::string>::value_type &pair)        {             return pair.second == m_s_cmp_string;        } private:         const std::string &m_s_cmp_string; }; int main(){    //方法2:采用hash_map    std::map<int,std::string> krc_keyvalue;    krc_keyvalue[1]="dj";    krc_keyvalue[2]="南山南";    krc_keyvalue[3]="中国好声音";//11号的歌曲    //krc_keyvalue.insert(std::pair<int, std::string>(1,"dj"));//不同的插入方式    std::map<int,std::string> krc_keyvalue1;    krc_keyvalue1[1]="小苹果";//9号歌曲    krc_keyvalue1[2]="中国好声音";    krc_keyvalue1[3]="默";//11号的歌曲    std::map<int,std::string>::iterator iter;    std::map<int,std::string>::iterator it;    for(iter=krc_keyvalue.begin();iter != krc_keyvalue.end();iter++)    {        it=krc_keyvalue1.end();        it = std::find_if(krc_keyvalue1.begin(), krc_keyvalue1.end(), map_value_finder(iter->second));        if (it == krc_keyvalue1.end())            printf("not found\n");        else            printf("find it\n");    }    getchar();    return 0; }
2、采用find查找key,这是find默认的操作,用得最多,在此省略。



0 0