提示:文章
文章目录
前言
前期疑问:
本文目标:
一、背景
最近
二、std::unorder_map知识点
之前做的题目好像提到过unorder_map的底层实现。
unorder_map和map的区别:
看了文章,map的底层使用的红黑树,(红黑树非严格平衡二叉搜索树,AVL是严格平衡二叉搜索树),unordered_map的底层使用的是哈希表。
资料原文:
map: map内部实现了一个红黑树(红黑树是非严格平衡二叉搜索树,而AVL是严格平衡二叉搜索树),红黑树具有自动排序的功能,因此map内部的所有元素都是有序的,红黑树的每一个节点都代表着map的一个元素。因此,对于map进行的查找,删除,添加等一系列的操作都相当于是对红黑树进行的操作。map中的元素是按照二叉搜索树(又名二叉查找树、二叉排序树,特点就是左子树上所有节点的键值都小于根节点的键值,右子树所有节点的键值都大于根节点的键值)存储的,使用中序遍历可将键值按照从小到大遍历出来。
unordered_map: unordered_map内部实现了一个哈希表(也叫散列表,通过把关键码值映射到Hash表中一个位置来访问记录,查找的时间复杂度可达到O(1),其在海量数据处理中有着广泛应用)。因此,其元素的排列顺序是无序的。哈希表详细介绍3、优缺点以及适用处
map:
优点:
有序性,这是map结构最大的优点,其元素的有序性在很多应用中都会简化很多的操作
红黑树,内部实现一个红黑书使得map的很多操作在lgn的时间复杂度下就可以实现,因此效率非常的高缺点: 空间占用率高,因为map内部实现了红黑树,虽然提高了运行效率,但是因为每一个节点都需要额外保存父节点、孩子节点和红/黑性质,使得每一个节点都占用大量的空间
适用处:对于那些有顺序要求的问题,用map会更高效一些
unordered_map:
优点: 因为内部实现了哈希表,因此其查找速度非常的快
缺点: 哈希表的建立比较耗费时间
适用处:对于查找问题,unordered_map会更加高效一些,因此遇到查找问题,常会考虑一下用unordered_map
这篇文章主要的不是熟悉和了解map和unordered_map的使用。主要是了解unordered的一个特性,就是在代码中看到的这样一个写法
std::unordered_map<LinkInfo, size_t, LinkInfo::HashFunction> interserctionIndex;
基于之前的理解,map应该是两个参数或者称为成员,即key值和value值。
但是这个写法有了第三个参数,查一下资料,查到这个叫【使用自定义的散列函数对象】
基于此问了copilot,unordered_map使用自定义的散列函数对象
你可以使用自定义的散列函数对象来创建 std::unordered_map
。以下是一个示例代码,展示了如何使用自定义的散列函数对象:
#include <iostream>
#include <unordered_map>
#include <string>
// 自定义散列函数对象
struct CustomHash {
std::size_t operator()(const std::string& key) const {
std::size_t hash = 0;
for (char c : key) {
hash = hash * 31 + c;
}
return hash;
}
};
int main() {
// 使用自定义散列函数对象创建 unordered_map
std::unordered_map<std::string, int, CustomHash> myMap;
// 插入元素
myMap["apple"] = 1;
myMap["banana"] = 2;
myMap["cherry"] = 3;
// 访问元素
std::cout << "apple: " << myMap["apple"] << std::endl;
std::cout << "banana: " << myMap["banana"] << std::endl;
std::cout << "cherry: " << myMap["cherry"] << std::endl;
return 0;
}
在这个示例中,我们定义了一个自定义的散列函数对象 CustomHash,并使用它来创建 std::unordered_map。这样,你就可以使用自定义的散列函数来处理键值对了。
总结:感觉就是自己写了个hash表的计算方式。
但是还遗留了疑问,如果hash冲突了怎么解决?
三、
3.1
总结
未完待续
标签:std,知识点,自定义,map,unorder,键值,散列,unordered From: https://blog.csdn.net/2301_77560238/article/details/145166278