[英]Unordered_map using pointer address as key
我正在尝试使用自定义键创建一个映射,这是一个对象的指针地址,如上所述。
我需要地址,因为到目前为止,这是在两个对象之间进行比较的唯一相关方法。
据我了解,正确的方法是使用const char*
作为键
这是typedef
:
typedef __gnu_cxx::unordered_map<const char*, std::string> TargetsTags;
我对以下内容感到困惑:
如何创建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());
};
};
}
const char*
呢?
这是这样做的正确方法吗?
使用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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.