哈希表,auto遍历

首先是c++中的哈希表和Python中的字典:

 

一.unordered_map

哈希表是一个键值对型容器,基于哈希表(hash_table)这种数据结构,理解上有些类似于字典,不同于基于红黑树的map。

 

头文件:#include<unordered_map>

创建表 unordered_map<key,value> Map_name;

初始化 Map_name[key] = value(key,value 是指数据类型)

插入元素 ①Map_name[key]=value;
               ② Map_name.insert(pair<int,int>(key,value));
               ③ unordered_map<int,int>Map_name={{key1,value1},{key2,value2}};

查找键值 table_name.find(key)

创建迭代器 unordered_map<key,value>::iterator iterator_name;

用迭代器访问元素的键值 it->first
用迭代器访问元素的键值对应的元素值 it->second

常用函数:

Map_name.emty():空为真,非空为假。

Map_name.erase(key值):如果没有找到返回0。

Map_name.find(要查找的值):找到的话,则返回key,不存在的话,返回.end(), 一般通过Map_name.find(key) == Map_name.end()来判断key值是否存在。

Map_name.count(key)函数:用以统计key值在unordered_map中出现的次数。c++ unordered_map不允许有重复的key。因此,如果key存在,则count返回1,如果不存在,则count返回0。

 

 

2.auto遍历

auto是声明自动变量格式为for(元素类型 遍历值:数组/容器),

之所以用auto事可以根据赋值自动推导出变量类型。

加&是引用,如果没有&,每次遍历都会给重新开辟空间存放遍历的值,空间复杂度是O(n),而使用引用的话,即使用同一块空间

同时,引用的情况下可以修改原来的值

 

 

此外还有 for(auto&& count: counts),其与for(auto& count: counts)的区别在于auto的推导是否受初始化值的影响。

auto&& 的推导收到初始化值的 value category 得影响。用左值初始化,推导得结果是一个左值引用;否则是一个右值引用。

auto& 的推导与初始化值的 value category 无关。

 

 

哈希表,auto遍历

 

LeetCode大佬题解:

哈希表,auto遍历

 

上一篇:STL中的map、unordered_map、hash_map


下一篇:c++数据结构总结