好久都没有在这里写blog了,当然我没有忘记这里,只是比较懒散,一点一点的都推迟了。
今天在写一点东西,用到了map,遇到点问题,所以对map做了进一步的了解,故此在这里作一个记录。
代码说明一切:
- #include <map>
- #include <cstring>
- #include <iostream>
- using namespace std;
- class comp
- {
- public:
- bool operator()(char* x, char* y) {
- return (strcmp(x, y) > 0);
- }
- };
- int main()
- {
- map<char*, char*, comp>* pm = new map<char*, char*, comp>();
- // map<char*, char*>* pm = new map<char*, char*>();
- char* k1 = (char*)"abc";
- char* k2 = (char*)"def";
- pm->insert(pair<char*, char*>(k1, (char*)"123"));
- pm->insert(pair<char*, char*>(k2, (char*)"456"));
- char* k = new char[4];
- strcpy(k, k1);
- // char* k = (char*)"abc";
- map<char*, char*>::iterator it = pm->find(k);
- if (it != pm->end()) {
- cout << it->second << endl;
- }
- return 0;
- }
如果使用 map
<char
*, char
*, comp
>* pm
= new map
<char
*, char
*, comp
>(); 这个定义,则可以得到
想要查询的结果。
反之,要是使用 map
<char
*, char
*>* pm
= new map
<char
*, char
*>(); 则不能查找到结果。
原因很明显,因为内置的比较函数只是作数值比较,也就是说比较的是地址。
但是有一点是值得注意的,如果另 char* k = (char*)"abc";这样即使使用后一种的map声明也是可以查到
结果的,这应该是编译器将常量统一到一个地址,而比较的是指针所值的地址。这个值得注意。
好了,就说这么多,欢迎拍砖。
阅读(1498) | 评论(0) | 转发(0) |