C++ map以自定义数据类型做键值

本文探讨了如何在C++中使用自定义数据类型作为STL map的键值,通过引用特定头文件并定义Time结构体,配合测试代码展示了实现过程。
摘要由CSDN通过智能技术生成


前言

作者最近在项目开发中遇到一个问题,想采用自定义的结构体作为键值,但是无论怎样,就连编译都不能通过,针对这个问题,作者就开始寻求解决的办法.。终于这个问题得以解决,高兴之余,决定写个例子,供大家参考

1.map在STL中的定义

template<class Key, class T, class Pred = less<Key>, class A = allocator<T> >
第一个参数 Key: map的关键字类型
第二个参数T:      map的值类型
第三个参数:        比较函数Compare(仿函数)
第四个参数:         内存配置对象      
map内部存储机制实际是以红黑树为基础,红
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
unordered_mapC++ 标准库中的容器,用于实现键值对的映射。默认情况下,unordered_map 可以使用基本数据类型作为键和值,如 int、double、string 等。但是,如果你想要使用自定义数据类型作为键或值,需要满足以下两个条件: 1. 自定义数据类型需要定义哈希函数(hash function):unordered_map 使用哈希函数将键映射到特定的存储桶中。你需要为自定义数据类型实现一个哈希函数,以便 unordered_map 可以正确地定位和操作键值对。 2. 自定义数据类型需要定义相等运算符(equality operator):unordered_map 使用相等运算符来比较两个键是否相等。你需要为自定义数据类型实现相等运算符,以便 unordered_map 可以正确地判断键的相等性。 下面是一个示例,演示了如何在 unordered_map 中使用自定义数据类型: ```cpp #include <iostream> #include <unordered_map> class MyCustomType { public: int x; int y; bool operator==(const MyCustomType& other) const { return (x == other.x) && (y == other.y); } }; // 哈希函数的实现 // 这里简单地将 x 和 y 的值相加作为哈希值 struct MyCustomTypeHash { std::size_t operator()(const MyCustomType& obj) const { return std::hash<int>()(obj.x + obj.y); } }; int main() { std::unordered_map<MyCustomType, int, MyCustomTypeHash> myMap; MyCustomType key1; key1.x = 1; key1.y = 2; MyCustomType key2; key2.x = 3; key2.y = 4; myMap[key1] = 10; myMap[key2] = 20; std::cout << myMap[key1] << std::endl; // 输出 10 std::cout << myMap[key2] << std::endl; // 输出 20 return 0; } ``` 在上述示例中,我们定义了一个名为 MyCustomType 的自定义数据类型,并为其实现了相等运算符和哈希函数。然后,我们使用 MyCustomType 作为 unordered_map 的键类型,并将 MyCustomTypeHash 作为自定义的哈希函数。这样,我们就可以在 unordered_map 中使用自定义数据类型了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值