C++ map 使用问题求助!
代码如下,请帮忙分析一下:
#include <iostream>
#include <string>
#include <map>
using namespace std;
typedef map <char *, char *> STRING_MAP;
void main(){
char * k;
// k = "key "; // 使用正常
k = new char(4); strcpy(k, "key "); // 这样下面的查找将找不到,不知道是什么原因,请大家帮帮忙!
char * v = "value ";
STRING_MAP map;
map.insert(STRING_MAP::value_type(k, v));
STRING_MAP::const_iterator it = map.find( "key ");
if(it != map.end()){
cout < < "已找到 " < < it-> first < < " : " < < it-> second < < endl;
}else{
cout < < "没找到 " < < endl;
}
}
[解决办法]
你还是用string取代char *吧。
你比较的2个char *指针的地址值,而不是它们所指向的字符串内容。
[解决办法]
map的内部使用operator <()来排序,对char*排序是没有意义的。
可以改用string来作为map的存储对象。
[解决办法]
谁让你用了VC6这个早该淘汰的编译器呢。
要么升级到VC2005express/devcpp,要么忍了。
[解决办法]
typedef map <char *, char *> STRING_MAP;
你里面存储 的是指针 所以你find 找不到
你可以 map <char *, char *> ::iterator iter;
for( iter = map.begin(); iter != map.end(); ++iter )
{ if(!strcmp( *iter, "K))
//找到
但是最好用string