char*
をキーとして、 を としてvector<int>
持つunordered_map を作成したいと思いますvalue
。以前の質問からchar*
、STL にはハッシュ関数が提供されていないことがわかりました。
このサイトから最初の実装を取得しました: http://www.cse.yorku.ca/~oz/hash.html
私のmain.cpp
ファイルを持っているので、次のコードを挿入しました:
namespace std
{
template<>
struct hash<char*>: public std::unary_function<char *, size_t>
{
size_t operator()(char * str) const{
size_t hash = 5381;
int c;
while(c = *str++)
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
return hash;
}
};
}
次に unordered_map 変数を作成しました。
std::unordered_map<char *, vector<int>> test;
ただし、これを実行して値「temp」を2回挿入すると:
std::unordered_map<char *, vector<int>> test;
char *t1 = new char[5];
strcpy(t1, "temp");
char *t2 = new char[5];
strcpy(t2, "temp");
vector<int>& ptr = test[t1];
ptr.push_back(0);
vector<int>& ptr2 = test[t2];
ptr2.push_back(1);
ベクトルの各要素が 0 または 1 であるサイズ 2 のベクトルを持つ 1 つの「temp」キーを持つ代わりに、最終的なマップには、「temp」という名前の 2 つのキーと、各キーにサイズ 1 のベクトルがあります。
ここに詳細な画像:
どうすればこれを回避できますか? 前もって感謝します