我正在使用C++ map在我的程序中实现一个字典.我的函数获取一个结构作为参数,并应该返回基于structure.name成员的关联值char named[32].以下代码演示了我的问题:
map <const char *, const char *> myMap;
myMap.insert(pair<const char *, const char *>("test", "myTest"));
char *p = "test";
char buf[5] = {'\0'};
strcpy(buf, "test");
cout << myMap.find(p)->second << endl; // WORKS
cout << myMap.find("test")->second << endl; // WORKS
cout << myMap.find(buf)->second << endl; // DOES NOT WORK
Run Code Online (Sandbox Code Playgroud)
我不确定为什么第三种情况不起作用,我该怎么办才能使它发挥作用.我调试了上面的代码来观察传递的值,我仍然无法解决问题.
谢谢!
指针比较,而不是字符串比较,将通过map定位元素来执行.前两个工作因为"test"是一个字符串文字,并具有相同的地址.最后一个不起作用,因为buf不会有相同的地址"test".
要修复,请使用std::string或定义比较器char*.
映射键是指针,而不是值.你的所有文字"测试"字符串共享存储,因为编译器很聪明,因此它们的指针是相同的,但是buf是不同的内存地址.
您需要使用具有值相等语义的映射键,例如std::string,而不是char*.
| 归档时间: |
|
| 查看次数: |
881 次 |
| 最近记录: |