c++容器之unordered_map 哈希映射

参考链接http://www.cplusplus.com/reference/unordered_map/unordered_map/?kw=unordered_map

简单介绍:无序映射(unordered_map)是关联容器,用于存储由键值(key)和映射值(value)的组合形成的元素,并允许基于其键快速检索各个元素。在unordered_map中,键值通常用于唯一地标识元素,而映射值是具有与该键关联的内容的对象。键的类型和映射的值可能会有所不同。

重要函数

(1)大小(Capacity):

empty: 判空函数

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; //返回多数元素
    }
};

 

上一篇:C++:STL容器 总结


下一篇:ACM学习历程——ZOJ 3829 Known Notation (2014牡丹江区域赛K题)(策略,栈)