参考链接:http://www.cplusplus.com/reference/unordered_map/unordered_map/?kw=unordered_map
简单介绍:无序映射(unordered_map)是关联容器,用于存储由键值(key)和映射值(value)的组合形成的元素,并允许基于其键快速检索各个元素。在unordered_map中,键值通常用于唯一地标识元素,而映射值是具有与该键关联的内容的对象。键的类型和映射的值可能会有所不同。
重要函数:
(1)大小(Capacity):
size: 返回容器的大小
(2)访问元素(Element access)
operator[]:利用[]进行元素的访问
at:使用at进行元素的访问
(3)元素查询(Element lookup)
find:获取元素的迭代器。在容器中搜索以k为键的元素,如果找到则返回一个迭代器,否则将迭代器返回到unordered_map :: end(容器末尾的元素)。
count:用关键字计数元素。在容器中搜索键为k的元素,并返回找到的元素数。 因为unordered_map容器不允许重复的键,所以这意味着如果容器中存在具有该键的元素,则该函数实际上返回1,否则返回0。
(4)操作元素
erase:擦除元素 从unordered_map容器中删除单个元素或一系列元素([first,last])。
clear: 清除内容。 删除unordered_map容器中的所有元素:调用它们的析构函数,然后将其从容器中删除,使其大小保持为0。
例子(哈希映射):
力扣 169. 多数元素(链接:https://leetcode-cn.com/problems/majority-element)
题目:
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入:[3,2,3]
输出:3
示例 2:
输入:[2,2,1,1,1,2,2]
输出:2
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/majority-element
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题方法:
class Solution {
public:
int majorityElement(vector<int>& nums) {
unordered_map<int,int> counts; //哈希映射
int maority = 0; //用于记录多数元素
int cnt = 0; //用于记录多数元素的个数
for(int num:nums){ //遍历数组nums
++counts[num]; //将当前元素对应的数值+1
if(counts[num] > cnt){ //判断当前元素是否是遍历到目前的多数元素
maority = num;
cnt = counts[num];
}
}
return maority; //返回多数元素
}
};