我在C++程序中聲明瞭像map<char *, int> m
這樣的哈希映射。但它沒有工作,所以我按照Using char* as a key in std::map 的指示,宣佈我的地圖像map<char *, int, cmp_str> m
。我的程序那種看起來像這樣Char *作爲地圖中的鍵C++
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 *
時發現所有字符串。任何幫助,將不勝感激。
那麼你的問題是什麼? –
其實['std :: map'](http://en.cppreference.com/w/cpp/container/map)不是* hash *映射,它是一個二叉樹。如果你想要一個散列,你應該使用['std :: unordered_map'](http://en.cppreference.com/w/cpp/container/unordered_map)。 –
發佈[MCVE](http://stackoverflow.com/help/mcve)。您發佈的代碼不是*完整*。 –