【发布时间】:2018-11-09 12:40:07
【问题描述】:
如何创建直接使用const char* 作为键的map/unordered_map?
如果我使用map<std::string,..>,那么在每次解析map["abc"] = ... 时,都会创建一个新的std::string 对象。这会导致分配内存、创建字符串对象并将字符串复制到其中的巨大开销。
如何声明一个直接使用const char*而没有任何开销的地图对象?
【问题讨论】:
-
在抱怨“开销”之前,测试它,对其进行基准测试,并对其进行分析。不,您不能真正使用任何类型的指针作为键,因为那样它将是 pointer 是键而不是它指向的内容。
-
这不会起作用,因为
std::hash和std::equal_to的默认特化将无法像您预期的那样运行。 -
密钥字符串有多长?你期望有多少不同的?键是可变的还是固定的?密钥的寿命是多久?
-
使用字符串键查找元素需要 70 纳秒,但使用长长键需要 20 纳秒。使用 const char* 我期望结果接近 long long。 std::string 内存分配的任何方式都可能发生,这是不可接受的。
标签: c++ string dictionary