目录:
1.map介绍
map是关联式容器之一,支持高效的关键字查找和访问能力,底层采用的是红黑二叉树的数据结构,因此效率非常高。map
类型通常被称为“关联数组(associative array)
”,关联数组与正常的数组类型,不同之处在于其下标不必是整数类型。map中的元素是一些关键字–值(key-value)
对:关键字起到索引的作用,“值”则表示与索引相关联的数据。当从map
中提取一个元素时候,会得到一个pair
类型对象,简单来说,pair
是一个模板类型,保存两个名为first
和second
的(公有)数据成员。map
所使用的pair
用first
成员来保存关键字,用second
成员来保存对应的值。STL
标准库中提供了8个关联容器,分别如下:
按关键字有序保存元素 | 含义 |
---|---|
map | 关联数组;保存关键字–值对 |
set | 关键字即值,即只保存关键字的容器 |
multimap | 关键字可以重复出现的map |
multiset | 关键字可以重复出现的set |
无序集合 | 含义 |
---|---|
unordered_map | 用哈希函数组织的map |
unordered_set | 用哈希函数组织的set |
unordered_multimap | 哈希组织的map;关键字可以重复出现 |
unordered_multiset | 哈希组织的set;关键字可以重复出现 |
1.1关联容器特点
1.关联容器不支持顺序容器的位置相关操作;如push_back/push_front等
,因为关联容器中元素是按照”关键字key”来存放的,
2.关联容器不支持构造函数或插入操作这些接收一个元素值和一个数量值的操作
3.关联容器的迭代器都是双向的。
1.2 pair
类型说明
pair
标准库类型,定义在utility
头文件中。一个pair
对组保存两个数据成员。它类似于容器,pair
是用来生成特定类型的模板。当我们去创建一个pair
时候,必须提供两个类型名,pair
的数据成员将会具有对应的类型,而且两个类型不要求是一样的。
如:
pair<string,int> pa1; //保存string,int类型数据
pair<int,int> pa2; //保存int,int类型数据
pair<vector<int>,int> pa3; //保存vector,int类型数据
pair<string,string> pa4; //报错string,string类型数据
pair
的默认构造函数会对数据成员进行值初始化操作。如上面的pa1
会被初始化为null和0;
pair
标准库类型数据不同,它的数据成员是public
的,其中两个成员分别是first 和 second
。可以用普通的成员访问符号(".")
去访问。
标准库定义了pair
的几个常用且有限的操作。
———————————————–附图———————————–
1.2.1 pair对组的创建和初始化
/*************************************************************************
2 * File Name: pair.cpp
3 * Author: The answer
4 * Function: Other
5 * Mail: 2412799512@qq.com
6 * Created Time: 2018年04月10日 星期二 23时36分39秒
7 ************************************************************************/
8
9 #include<iostream>
10 #include<map>
11 #include<vector>
12 using namespace std;
13 int main(int argc,char **argv)
14 {
15 //pair<string,string> anon = {"hello","world."}; 用花括号包围的初始化器来初始化anon,要C++11才支持
16 //1.pair对组创建方式1
17 pair<int,int> _pa(66,88);
18 cout<<_pa.first<<","<<_pa.second<<endl; //66,88
19
20 //2.用make_pair来创建并初始化pair
21 pair<string,int> anon = make_pair("hello",66);
22 cout<<anon.first<<endl; //hello
23 cout<<anon.second<<endl; //66
24
25
26 //3.采用pair对组赋值来初始化另一个pair对组
27 pair<string,int> pa = anon;
28 cout<<pa.first<<","<<pa.second<<endl; // dali,4
29
30 return 0;
31 }
2.map容器的操作
在map
中,元素是关键字–值对key-value
,即每一个元素都是一个pair
对象,包含一个关键字和一个关联的值。当初始化一个map
时,必须提供关键字类型和值类型;将关键字–值类型包围在一个花括号中:
{key,value};
eg:通过pair对组的方式来初始化map
map<string,int> _map;
_map.insert(pair<string,int>("hello",66));
来指出它们一起构成了map
中的一个元素。
未完,待续…………………..