读书人

STL map中查找char*的有关问题

发布时间: 2012-05-11 12:55:37 作者: rapoo

STL map中查找char*的问题
我定义的一个
然后在往里面存了一些字符串如:
map<char*,int> id ;
char a[]="ab";
id.insert(pair<char*,int>(a,11));
char* arr=new char[3];
arr[0]='a';
arr[1]='b';
arr[2]='\0';
map<char*,int>::iterator it;
it=id.find(arr);//在这里找不对应的有序对
为什么,求高手解答。
代码是手写的,可能有点问题,可是大体意思是那样的。

我猜想:会不会find接收的是arr对应的地址而不对应的字符串?

[解决办法]
因为map默认的比较是用==,而char*的==是比较两根指针。用map<string, int>吧。
[解决办法]
map是以你定义的键值来做key的,你给它一个地址做键值,它当然用地址做key了。
你给它string做键值,它就用string做key,不再用地址了。
再说一遍,char*是指针,指针的内容是地址,不是字符串。而string是对象,比较的是内容!
两个是有区别的
[解决办法]
用map<string,int>否则比较的是地址,而不是字符串。
[解决办法]
上面都是高手。。

如果想简单,就用STRING得了。char*那是指针。。
[解决办法]
char* 其实是指针,一般是4字节地址吧,你加入的那个和后来查找的数组arr,对应的值肯定不一样啊。。印象中find是不是有其他重载,可以自己写比较函数的,可以试试。。。

读书人网 >C++

热点推荐