我正在尝试创建一个地图,其中自定义键是对象的指针地址,正如所提到的。
我需要这个地址,因为现在这是比较两个对象之间唯一相关的方式。
从我的理解来看,正确的做法是使用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*
是怎样的呢?
这样做是否正确?
__gnu_cxx
中的那两个前导下划线了吗?这基本上意味着它是一个私有符号。如果你的编译器和标准库太旧而不支持 C++11,那么请使用std::tr1
命名空间及其头文件;如果你的编译器和库甚至不支持 TR1,则请使用 Boost。 - Some programmer dude__gnu_cxx
,您是正确的。 - Itzik984__gnu_cxx::unordered_map<const char*, std::string, myhashtype, myequalstype>
(如果它在C++11中工作,不确定在你的编译器中如何实现,但是当你尝试使用hash<std::string>
时,我感觉这是一个好的方向)... - W.F.