具有char * key和int值的容器

时间:2013-06-08 13:47:32

标签: c++ map mfc stdmap

我需要一个容器,我可以在其中存储char*键和int值。

我可以使用std::map和mfc CMap,但在使用char*作为关键字时,我不知道什么操作。

如下所示:

#include"iostream"
#include<map>
using namespace std;

std::map<char*,int>Mymap;
or
//Cmap<char*, char*, int, int>Mymap;

char* p = "AAA";
char* q = "BBB";

int p_val = 10;
int q_val = 20;

int main()
{
    // How to use insert, find and access keys      

    return 0;
}

我想知道map以及CMap的解决方案。

2 个答案:

答案 0 :(得分:2)

以下是如何使用带有char * key和int value的std“”map的示例。

//Example of std::map with char* key and int as value.

#include"iostream"
using namespace std;
#include<map>

struct cmp_str
{
    bool operator()(char *first, char  *second)
    {
        return strcmp(first, second) < 0;
    }
};

typedef std::map<char*,int, cmp_str>MAP;
MAP myMap;

void Search(char *Key)
{
    MAP::iterator iter = myMap.find(Key);

    if (iter != myMap.end())
    {
        cout<<"Key : "<<(*iter).first<<" found whith value : "<<(*iter).second<<endl;
    }
    else
    {
        cout<<"Key does not found"<<endl;
    }
}

int main()
{
    char *Key1 = "DEV";
    char *Key2 = "TEST";
    char *Key3 = "dev";

    //Insert Key in Map
    myMap.insert(MAP::value_type(Key1, 100));
    myMap.insert(MAP::value_type(Key2, 200));


    // Find Key in Map
    Search(Key1);       // Present in Map
    Search(Key2);       // Present in Map

    Search(Key3);       // Not in Map as it's case sensitive

    myMap.erase(Key2);  // Delete Key2
    Search(Key2);       // Not in Map as deleted 

    return 0;
}

通过使用MFC cmap,我们也可以实现相同的功能,但操作可能会(功能)发生变化。

答案 1 :(得分:1)

请注意,如果您不编写自己的比较器,那么内部映射函数实际会比较的内容就是char *元素的内存地址。所以,你基本上需要你自己的比较器,这并不难写。或者只使用std::string作为密钥,只要您需要char*,就可以致电string.c_str()