小编tra*_*vis的帖子

使用char*作为std :: map中的键,它是如何工作的

这个问题直接与使用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)

c++ const-char stdmap map

7
推荐指数
2
解决办法
5308
查看次数

标签 统计

c++ ×1

const-char ×1

map ×1

stdmap ×1