STL之map

目录:

1.map介绍

map是关联式容器之一,支持高效的关键字查找和访问能力,底层采用的是红黑二叉树的数据结构,因此效率非常高。map类型通常被称为“关联数组(associative array)”,关联数组与正常的数组类型,不同之处在于其下标不必是整数类型。map中的元素是一些关键字–值(key-value)对:关键字起到索引的作用,“值”则表示与索引相关联的数据。当从map中提取一个元素时候,会得到一个pair类型对象,简单来说,pair是一个模板类型,保存两个名为firstsecond的(公有)数据成员。map所使用的pairfirst成员来保存关键字,用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中的一个元素。

未完,待续…………………..

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

内核之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值