Unordered_map 使用指针地址作为键

Itz*_*984 4 c++ hash unordered-map hashmap

我正在尝试使用自定义键创建一个映射,如上所述,该键是对象的指针地址。

我需要该地址,因为目前这是比较两个对象的唯一相关方法。

据我了解,执行此操作的正确方法是使用const char*as key

这里是typedef

typedef __gnu_cxx::unordered_map<const char*, std::string> TargetsTags;
Run Code Online (Sandbox Code Playgroud)

我对以下内容有点困惑:

我如何创建operator()

这就是我用的std::string

namespace __gnu_cxx {
    template<>
    struct hash<std::string>
    {
        hash<const char*> h;
        size_t operator()(const std::string &s) const
        {
            return h(s.c_str());
        };
    };
}
Run Code Online (Sandbox Code Playgroud)

关于什么const char*

这是正确的做法吗?

W.F*_*.F. 5

使用 c++11 的工作示例:

#include <iostream>
#include <unordered_map>
#include <string>
#include <functional>

using namespace std;

class myhash {
public:
   size_t operator() (const char *val) const {
      return std::hash<std::string>()(val);
   }
};

class myequal {
public:
   bool operator()(const char *val1, const char *val2) const{
      return std::string(val1) == std::string(val2);
   }
};



int main() {

   std::unordered_map<const char*, string, myhash, myequal> mymap;
   mymap["abc"] = "abcd";
   mymap["cba"] = "dcba";
   std::cout << mymap["abc"] << std::endl;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)