2

我需要一个可以存储char*键和int值的容器。

我可以使用std::map和 mfc ,但我不知道用作 keyCMap时的一些操作。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

4

2 回答 2

2

这是如何使用带有 char* 键和 int 值的 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,我们也可以实现相同的功能,但操作可能(功能)会发生变化。

于 2013-06-18T11:30:20.040 回答
1

请注意,如果您不编写自己的比较器,则内部映射函数实际上将比较的内容是您的 char* 元素的内存地址。因此,您基本上需要自己的比较器,这并不难编写。或者简单地std::string用作键,只要你需要char*,你只需调用string.c_str().

于 2013-06-08T13:50:20.477 回答