使用 C 字符串作为映射键有什么问题吗?
std::map<const char*, int> imap;
地图中元素的顺序无关紧要,因此可以使用std::less<const char*>
.
我正在使用 Visual Studio 并根据 MSDN(Microsoft 特定):
在某些情况下,可以“合并”相同的字符串文字以节省可执行文件中的空间。在字符串文字池中,编译器使对特定字符串文字的所有引用都指向内存中的同一位置,而不是让每个引用都指向字符串文字的单独实例。
它说它们仅在某些情况下被池化,因此使用字符串文字访问地图元素似乎不是一个好主意:
//Could these be referring to different map elements?
int i = imap["hello"];
int j = imap["hello"];
是否可以重载operator==
forconst char*
以便使用实际的 C 字符串而不是指针值来确定映射元素是否相等:
bool operator==(const char* a, const char* b)
{
return strcmp(a, b) == 0 ? true : false;
}
使用 C 字符串作为映射键是个好主意吗?