C++ 散列映射和无序映射的互换使用(C+;+;11)
从之前的一篇文章中,我了解到,存在于preor-C++-11中的hash_映射是一种非标准的映射,它已经被标准的无序_映射替换为可互换的映射。然而,我有一些疑问。 早些时候(在C++11之前),我们使用hash_映射作为:C++ 散列映射和无序映射的互换使用(C+;+;11),c++,c++11,stl,hashmap,unordered-map,C++,C++11,Stl,Hashmap,Unordered Map,从之前的一篇文章中,我了解到,存在于preor-C++-11中的hash_映射是一种非标准的映射,它已经被标准的无序_映射替换为可互换的映射。然而,我有一些疑问。 早些时候(在C++11之前),我们使用hash_映射作为: hash_map<string,string,shash,seq> some_hashmap; hash\u映射一些hashmap; 其中,shash和seq的定义如下: class shash { public: size_t operator(
hash_map<string,string,shash,seq> some_hashmap;
hash\u映射一些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);
}
};
类shash{
公众:
size\u t运算符()(常量字符串和a)常量{
寄存器大小\u t ret=0;
寄存器字符串::常量迭代器a,e;
a=s.begin();
e=s.end();
对于(;a!=e;++a){
ret=(ret>2)+*a;
}
返回(ret);
}
};
类别seq{
公众:
布尔运算符()(常量字符串和str1、常量字符串和str2)常量{
寄存器常量char*s1=str1.c_str();
寄存器常量char*s2=str2.c_str();
对于(;*s1&&*s2&&*s1==*s2;++s1,++s2);
返回(!*s1&&!*s2);
}
};
无序的_图(C++11)在这里可以互换使用吗?或者,有没有更好的shash和seq替代方法,或者可以在无序映射中省略它们呢?您可以(在某些情况下您必须)在std::无序映射中明确设置哈希函数(这里是shash)当您尝试它时发生了什么?例如,您已经检查了一个关于
std::无序映射
的参考?你说的“互换使用”是什么意思?你能详细说明一下吗?我的意思是,C++11的无序映射可以用其通常的意图来取代早期的散列映射,即拥有键值对和相同的接口usage@KerrekSB当我迁移到C++11时,看起来不错,只是想从Stackoverflow的专家那里确认一下