我需要一个容器,我可以在其中存储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
的解决方案。
答案 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()
。