首先是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 无关。
LeetCode大佬题解: