unordered_map是C++标准库中的一个容器,它对于存储键值对类型的数据非常有用。unordered_map同样也是哈希表的一种实现。在使用unordered_map时,需要包含头文件<unordered_map>。
一、unordered_map应用介绍
unordered_map是C++标准库中的一个容器,它提供了将键映射到值的功能,使我们可以快速的查找和访问键值对。unordered_map可以存储任意类型的数据,键和值可以是不同的类型。在C++11以前,我们一般使用map或者hash_map来完成同样的工作,但是从C++11开始,由于unordered_map的效率提高,它已经成为了首选的容器类型。
二、unordered_map实现原理介绍
unordered_map是由哈希表实现的,具体实现方式是散列函数。哈希表是将数据存在一个数组中,将这个数组称为哈希表,在这些数组元素中存放的就是键值对。在使用unordered_map时,想要从中查找某个key值对应的value值,我们需要在数组中找到这个元素,而不是遍历整个库,这样就可以大大提高查找元素的效率。
散列函数是unordered_map实现的关键,它决定了元素在哈希表中的存储位置。散列函数接受键值对作为参数,返回一个索引值。在unordered_map的内部结构中,哈希表是由桶(bucket)组成的,桶中存放的是键值对,多个键值对可以存放在同一个桶中。当我们插入一个键值对时,我们需要先计算其散列值,然后根据散列值找到对应的桶。在C++语言标准化之前,一些语言使用的哈希表,如__gnu_cxx::hash_map,使用的是开链法,但是 unordered_map使用的是平衡二叉树和红黑树,这种方式避免了链表退化的情况。
三、unordered_map应用举例
我们来看一下unordered_map如何应用在实际中。假设我们有一个学校的所有学生的信息,包括学生的姓名和学号。我们要实现一个程序,可以根据学生的姓名来查找学生的学号。
#include <iostream>
#include <unordered_map>
using namespace std;
int main()
{
unordered_map<string, int> students;
// 插入学生信息
students["Jack"] = 1001;
students["Lucy"] = 1002;
students["Tom"] = 1003;
students["Lily"] = 1004;
// 查找学生信息
string name;
cout << "请输入要查找的学生姓名:" ;
cin >> name;
if (students.find(name) != students.end())
{
cout << "学生 " << name << " 的学号为:" << students[name] << endl;
}
else
{
cout << "未找到该学生信息" << endl;
}
return 0;
}
以上代码中,我们首先定义了一个unordered_map容器,其中键是string类型,值是int类型。然后我们向这个容器中插入四个元素,分别是四个学生的信息。接着,我们从用户输入要查找的学生姓名,然后利用find函数查找这个学生的学号,如果存在,则输出对应的学号,否则输出未找到该学生信息的提示语。
四、小结
unordered_map是C++标准库中的一个容器,它提供了将键映射到值的功能,使我们可以快速的查找和访问键值对。unordered_map是基于哈希表实现的,它的效率非常高。在使用unordered_map时,需要注意键值对的类型匹配,同时需要开足桶的数量,以免导致桶的链过长,影响效率。