这个问题直接与使用char作为stdmap中的键有关.
我理解传入的比较函数的作用以及为什么char *类型作为键需要它.但是,我不确定更新实际上是如何工作的.
我很好奇你要更新密钥的情况.如何std::map知道如何比较之间的相等性const char *,cmp_str只告诉map将键插入到树中的顺序.
我已经对stl_tree.h代码进行了一些挖掘(从这里开始),但是找不到多少.我唯一的猜测是它做了直接记忆比较.
我对underling 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"] …Run Code Online (Sandbox Code Playgroud)