我想创建一个 unordered_map,它具有 achar*
作为键和 avector<int>
作为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”:
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);
最终映射不是有一个“temp”键和一个大小为 2 的向量,其中向量的每个元素是 0 或 1,它有两个名为“temp”的键,每个键中有一个大小为 1 的向量。
这是详细的图片:
我怎样才能避免这种情况发生?先感谢您