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;}
}
}
プログラムを実行すると、ifが挿入されていなくても最初にすべての文字列が検索されます。 map<string, int> m;
を使用してみて、char *str
をstd::string
に変換したところ、正常に動作しました。しかし、入力ファイルは非常に大きいので、文字列を使用すると時間がかかります。 char *
を使用すると、なぜそれがすべての文字列を見つけるのか分かりません。どんな助けもありがとう。
あなたの質問は何ですか? –
実際、['std :: map'](http://en.cppreference.com/w/cpp/container/map)は*ハッシュマップではありません。バイナリツリーです。ハッシュが必要な場合は、['std :: unordered_map'](http://en.cppreference.com/w/cpp/container/unordered_map)を使用してください。 –
[MCVE](http://stackoverflow.com/help/mcve)を投稿してください。投稿したコードは*完全ではありません。 –