【发布时间】:2014-07-11 12:46:58
【问题描述】:
我希望在性能情况下使用 c-strings 而不是 std::string。我有以下代码:
std::map<const char*, int> myMap;
.
.
.
myMap.insert(std::pair<const char*, int>(str.c_str(), myint));
std::cout << myMap.count(str.c_str()) << std::endl;
奇怪的是,我刚刚输入的值对于count()返回 0?
【问题讨论】:
-
因为它不比较你指向的字符串,它只比较指针的地址。如果它们指向相同的文本但位于内存的不同部分,则它将不起作用。您可以编写一个自定义比较函数,但我不知道它是否在我的脑海中。
-
对于您的具体示例,如果您不更改它们之间的 str,我希望
c_str在两个调用中返回相同的指针地址,但我不知道这是否得到保证。 -
为什么不简单地使用
std::map<std::string, int> myMap;或者更好地使用枚举值作为键? -
您希望如何通过使用
const char*而不是std::string来获得性能?