从之前的帖子Difference between hash_map and unordered_map?中,我了解在先前的C ++ - 11中存在的hash_map是一种非标准的,并且已被标准的unordered_map替换为可互换的。但是,我有一些疑问。 早些时候(在C ++ 11之前),我们使用hash_map作为:
hash_map<string,string,shash,seq> some_hashmap;
其中shash和seq可以定义如下:
class shash {
public:
size_t operator()(const string &a) const {
register size_t ret = 0;
register string::const_iterator a,e;
a = s.begin();
e = s.end();
for(;a != e;++a) {
ret = (ret << 5) + (ret >> 2) + *a;
}
return(ret);
}
};
class seq {
public:
bool operator()(const string &str1,const string &str2) const {
register const char *s1 = str1.c_str();
register const char *s2 = str2.c_str();
for(;*s1 && *s2 && *s1 == *s2;++s1,++s2);
return(!*s1 && !*s2);
}
};
unordered_map(C ++ 11)可以在这里互换使用吗?或者,是否有更好的shash和seq替代方案,还是可以在unordered_map中省略它们?