首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

无法专门化std::哈希以在unordered_map中存储自定义类型

在C++中,std::unordered_map是一个哈希表实现的关联容器,用于存储键值对。默认情况下,std::unordered_map使用std::hash作为哈希函数,但是对于自定义类型,需要提供自定义的哈希函数。

要在std::unordered_map中存储自定义类型,需要完成以下几个步骤:

  1. 定义自定义类型:首先需要定义自定义类型,并确保该类型具有适当的成员变量和方法。
  2. 实现哈希函数:为了在std::unordered_map中使用自定义类型作为键,需要实现一个哈希函数。哈希函数将自定义类型映射到一个整数值,以便在哈希表中进行存储和查找。哈希函数应该是一个纯函数,对于相同的输入始终返回相同的输出。
  3. 实现相等比较函数:为了在std::unordered_map中进行键的比较,需要实现一个相等比较函数。相等比较函数用于比较两个自定义类型的键是否相等。

以下是一个示例,演示如何在std::unordered_map中存储自定义类型Person:

代码语言:cpp
复制
#include <iostream>
#include <unordered_map>
#include <functional>

class Person {
public:
    std::string name;
    int age;

    Person(const std::string& n, int a) : name(n), age(a) {}
};

// 自定义哈希函数
struct PersonHash {
    std::size_t operator()(const Person& p) const {
        std::size_t h1 = std::hash<std::string>{}(p.name);
        std::size_t h2 = std::hash<int>{}(p.age);
        return h1 ^ h2;
    }
};

// 自定义相等比较函数
struct PersonEqual {
    bool operator()(const Person& p1, const Person& p2) const {
        return p1.name == p2.name && p1.age == p2.age;
    }
};

int main() {
    std::unordered_map<Person, std::string, PersonHash, PersonEqual> personMap;

    Person p1("Alice", 25);
    Person p2("Bob", 30);

    personMap[p1] = "Engineer";
    personMap[p2] = "Manager";

    std::cout << personMap[p1] << std::endl;  // 输出:Engineer
    std::cout << personMap[p2] << std::endl;  // 输出:Manager

    return 0;
}

在上述示例中,我们定义了一个Person类,该类具有name和age成员变量。然后,我们实现了PersonHash结构体作为哈希函数,使用std::hash对name和age进行哈希计算。同时,我们还实现了PersonEqual结构体作为相等比较函数,用于比较两个Person对象是否相等。

在主函数中,我们创建了一个std::unordered_map,键类型为Person,值类型为std::string。我们可以像使用普通的std::unordered_map一样使用personMap,存储和访问自定义类型Person的键值对。

对于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,建议参考腾讯云官方文档或咨询腾讯云的技术支持团队,以获取与自定义类型在云计算中的存储相关的产品和解决方案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券