【发布时间】:2014-04-25 01:19:04
【问题描述】:
我有一个std::map<std::string,foo> 并且需要经常使用find() 元素,而不是std::string,我有一个const char*。但是,map.find("key_value") 不起作用,我需要一个 std::string。所以,我需要map.find(std::string{"key_value"}),但这每次都会创建一个临时的std::string(及其分配和取消分配),这可能会导致效率低下。这个推理正确吗?如果是,我该如何改善这种情况?
我正在考虑使用const char* 周围的包装器作为地图的关键,它具有自己的比较功能并且可以廉价地包装在任何const char* 周围,无需分配。这是一个好主意吗? (请注意,我的映射值不可复制,只能移动)。
【问题讨论】:
-
您测量过性能影响吗?这是性能下降的主要原因吗?
-
相关性 - 你考虑过
std::unordered_map吗?您的find()调用将是 O(1)。 -
太糟糕了
std::map没有find的模板版本,它接受任何与密钥类型相当的内容。