C++ 散列映射和无序映射的互换使用(C+;+;11)

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(

从之前的一篇文章中,我了解到,存在于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()(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的专家那里确认一下