1. unordered系列关联式容器
1.1 unordered_map
1.1.1 unordered_map
-
unordered_map 是存储 <key, value> 键值对的关联式容器,其允许通过 keys 快速的索引到与其对应的 value。
-
在 unordered_map 中,键值通常用于惟一地标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。
-
在内部 ,unordered_map 没有对 <kye, value> 按照任何特定的顺序排序 , 为了能在常数范围内找到 key 所对应的 value , unordered_map 将相同哈希值的键值对放在相同的桶中。
-
unordered_map 容器通过 key 访问单个元素要比 map 快,但它通常在遍历元素子集的范围迭代方面效率较低。
-
unordered_maps 实现了直接访问操作符 (operator[]) ,它允许使用 key 作为参数直接访问value 。
-
它的迭代器至少是前向迭代器。
1.1.2 unordered_map的接口说明
1. unordered_map的构造
函数声明
|
功能介绍
|
unordered_map
|
构造不同格式的unordered_map对象
|
2. unordered_map的容量
函数声明
|
功能介绍
|
bool empty() const
|
检测unordered_map是否为空
|
size_t size() const
|
获取unordered_map的有效元素个数
|
3. unordered_map的迭代器
函数声明
|
功能介绍
|
begin
|
返回unordered_map第一个元素的迭代器
|
end
|
返回unordered_map最后一个元素下一个位置的迭代器
|
cbegin
|
返回unordered_map第一个元素的const迭代器
|
cend
|
返回unordered_map最后一个元素下一个位置的const迭代器
|
4. unordered_map的元素访问
函数声明
|
功能介绍
|
operator[]
|
返回与key对应的value,没有一个默认值
|
注意:该函数中实际调用哈希桶的插入操作,用参数key与V()构造一个默认值往底层哈希桶
中插入,如果key不在哈希桶中,插入成功,返回V(),插入失败,说明key已经在哈希桶中,
将key对应的value返回。
5. unordered_map的查询
函数声明
|
功能介绍
|
iterator fifind(const K& key)
|
返回key在哈希桶中的位置
|
size_t count(const K& key)
|
返回哈希桶中关键码为key的键值对的个数
|
注意:unordered_map中key是不能重复的,因此count函数的返回值最大为1
6. unordered_map的修改操作
函数声明
|
功能介绍
|
insert
|
向容器中插入键值对
|
erase
|
删除容器中的键值对
|
void clear()
|
清空容器中有效元素个数
|
void swap(unordered_map&)
|
交换两个容器中的元素
|
7. unordered_map的桶操作
函数声明
|
功能介绍
|
size_t bucket_count()const
|
返回哈希桶中桶的总个数
|
size_t bucket_size(size_t n)const
|
返回n号桶中有效元素的总个数
|
size_t bucket(const K& key)
|
返回元素key所在的桶号
|
1.2 在线OJ
1.重复n次的元素
class Solution {
public:
int repeatedNTimes(vector<int>& A) {
size_t N = A.size()/2;
// 用unordered_map统计每个元素出现的次数
unordered_map<int, int> m;
for(auto e : A)
m[e]++