您的位置:首页 > 编程语言 > C语言/C++

C++之关联容器(associative - container)简介

2016-06-05 19:49 441 查看

前言:本人没有算法基础就去刷leetcode,由于需要用到hash table,反映在C++上即关联容器。

一、Hash Table

是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表

给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。

Ex:统计单词或者文章中某单词出现的频率、数组中重复数字频率等问题

就我目前做的比较基础的leetcode题,有这些问题需要用到Hash Table

217. Contains Duplicate

242.
Valid Anagram

347.
Top K Frequent Elements

350.
Intersection of Two Arrays II


二、关联容器(associative
- container)

关联容器中的元素是按关键字来保存和访问和访问的。标准库提供8个关联容器
1、按关键字有序保存元素
map 关联数组:保存(关键字-值)对
set 关键字即值,只保存关键字的容器
multmap 关键字可重复出现的map
multiset 关键字可重复出现的set

2、无序集合
unordered-map 用哈希函数组织的map
unordered-set 用哈希函数组织的set
unordered-multimap 哈希组织的map:关键字可以重复出现
unordered-multiset 哈希组织的set:关键字可以重复出现

Ex:使用map,统计单词出现的频率
<pre name="code" class="cpp">map<string,int> count;
string word;
for(string &i : word) count[word]++;  //范围for语句







使用set,统计单词的时候,我们忽略"the"、"and"
<pre name="code" class="cpp">map<string,int> count;
set<string> exclude = {"the","and"};string word;
for(string &i : word)
{
if(exclude.find(word)  ==  exclude.end())
count[word]++;
}
//find调用返回一个迭代器,如果给定关键字在set中,迭代器指向该关键字。否则,find返回尾后迭代器。所以仅当word不在exclude中时我们才更新word的计数器。






                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: