我在我的C ++程序中声明了一个像map<char *, int> m
这样的哈希映射。但它没有用,所以我按照Using char* as a key in std::map的说明进行操作
并宣布我的地图为map<char *, int, cmp_str> m
。我的程序看起来像这样
struct cmp_str
{
bool operator()(char const *a, char const *b)
{
return std::strcmp(a, b) < 0;
}
};
int main(int argc, char *argv[])
{
map<char *, int, cmp_str> m
//Reading strings from a file
while( not end of file )
{
// char *str contains the line
if(m.find(str) != m.end()) {m[str]++; }
else {m[str] = 1;}
}
}
当我执行程序时,如果找不到所有字符串,即使它们未插入也是如此。当我尝试使用map<string, int> m;
并将char *str
转换为std::string
时,它运行正常。但输入文件太大,我使用字符串需要很多时间。我不确定为什么在使用char *
时它会找到所有字符串。任何帮助将不胜感激。
答案 0 :(得分:3)
当您使用playySlides()
时,在将其插入map<char *, int, cmp_str> m
后无法修改该缓冲区,因为地图不会复制数据而是指针本身。当您使用std::map
std::map<std::string,int>
时,确实会制作副本,这就是为什么它会起作用而且速度较慢。因此,您需要手动创建许多缓冲区并在其中存储字符串(这会使您的程序变慢)或使用std::string
这是正确和更好的方式。