gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:01:16 25 4
gpt4 key购买 nike

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com