这个问题与使用 char 作为 stdmap 中的键直接相关。
我了解传入的比较函数的作用以及为什么它需要char *
类型作为键。但是,我不确定更新实际上是如何工作的。
我很好奇您正在更新密钥的情况。如何std::map
知道如何比较 之间的相等性const char *
,cmp_str
只告诉 map 将键插入树的顺序。
我已经对代码进行了一些挖掘stl_tree.h
(从这里提取),但找不到太多。我唯一的猜测是它进行了直接的内存比较。
我对下级stl_tree
班级如何处理这种情况很感兴趣,或者如果它一直没有正确处理,那么什么情况下会中断?
代码
#include <map>
#include <iostream>
#include <cstring>
struct cmp_str
{
bool operator()(char const *a, char const *b)
{
return std::strcmp(a, b) < 0;
}
};
int main ( int argc, char ** argv )
{
std::map<const char*, int, cmp_str> map;
map["aa"] = 1;
map["ca"] = 2;
map["ea"] = 3;
map["ba"] = 4;
map["ba"] = 5;
map["bb"] = 6;
map["ba"] = 7;
std::map<const char*, int, cmp_str>::iterator it = map.begin();
for (; it != map.end(); it++ )
{
std::cout << (*it).first << ": " << (*it).second << std::endl;
}
return 0;
}
输出
aa: 1
ba: 7
bb: 6
ca: 2
ea: 3