c++ - Unordered_map 使用指针地址作为键

标签 c++ hash hashmap unordered-map

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

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

据我所知,正确的做法是使用 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;
}

关于c++ - Unordered_map 使用指针地址作为键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29457875/

相关文章:

java - HashMap<Integer, Integer> 的 jol 足迹

对于 D3.js 图表,Javascript map 不会返回数组值

c++ - Boost Spirit 像语法一样解析 XML

c++ - re write-sql statement Insert OR REPLACE 从java到c++ NDK Android

c++ - 使用 Microsoft Visual C++ 2010 Express 时出现链接错误 LNK1123

c++ - 散列多态类型的正确方法

c++ - Qt:如何判断一个widget在QScrollArea中是否可见?

data-structures - 电话簿的数据结构,它可以按姓名搜索号码,也可以按号码搜索姓名

ruby - 如何在 Ruby 中合并哈希数组的内容(键和内容)

java - 在 MultiDimensional HashMap 中存储来自 MySQL 查询的多行