您现在的位置是:首页 >技术教程 >[C++] 关联容器网站首页技术教程

[C++] 关联容器

Asphyxia+ 2023-06-11 20:00:02
简介[C++] 关联容器

1. 有序关联容器

1.1 有序关联容器要点

        1.容器里的元素对都是有序的,并且是按关键字来排序的。

        2.容器里元素的排序,是按"<"运算符来算的,所以容器的关键字的类型必须支持"<"运算符

1.2 分类:

容器头文件含义
map  <key_type,mapped_type> #include<map>关联数组,保存关键字-值对,关键字唯一
multimap  <key_type,mapped_type> #include<map>关键字可重复的map,关键字对应多个值
set  <key_type> #include<set>关键字即值,即只保存关键字的容器,关键字唯一
multiset  <key_type> #include<set>关键字可重复的set
pair  <key_type,mapped_type> #include<utility>是一个用来生成特定类型的模板,map中每一个元素对,都是pair类型。

1.3 关键字类型要求

        1.有序容器的关键字必须遵循严格弱序C++ 严格弱序)的要求,即必须有'<'运算符的定义

        2.有序容器set可以指定操作类型,使用关键字类型的比较函数,其函数传入的是一个函数指针,形式:set<key_type, 函数指针>  /  set<key_type,decltype(函数) * >,并且函数指针指向的自定义比较函数,也必须遵循严格弱序的要求。

1.4 pair类型

头文件:#include<utility>

形式:pair  <key_type,mapped_type>

含义:是一个用来生成特定类型的模板,并且pair的数据成员都是公有的,map中每一个元素对,都是pair类型。 

操作含义
pair<T1,T2> p;创建一个名为p的pair类型,并对T1,T2类型进行值初始化

pair<T1,T2> p(v1,v2);

pair<T1,T2> p={v1,v2};

创建一个名为p的pair类型,并对T1,T2类型分别用v1,v2进行初始化
maker_pair(v1,v2);返回一个v1,v2初始化的pair。pair的对应类型由v1,v2推断而出。
p.first;返回p的名为first的公有数据成员
p.second;返回p的名为second的公有数据成员
p1 relop p2relop是关系运算,关系运算用运算符'<'来实现

p1==p2

p1!=p2

当first和seconde都相等时,才相等,否则不等

1.5 关联容器操作

类型别名:

关联容器额外的类型别名含义操作(map为例)
key_type此容器的关键字类型map<string,int>::key_type
mapped_typemap容器的值类型,只有map才有map<string,int>::mapped_type
value_type

map:pair<const key_type,mapped_type>

set:与key_type相同

map<string,int>::value_type

迭代器:

操作注意
解引用符:*mapiterator,*setiterator

1.对map迭代器使用解引用符,会得到一个value_type类型的值,即pair<const key_type,mapped_type>,注意这里的关键字是const类型

2.对set迭代器使用解引用符,会得到一个const key_type类型,这个关键字也是const类型。

遍历关联容器关联容器支持begin()和end()操作,可以用来遍历容器,但是迭代器在遍历容器时是按关键字的升序来遍历的。
关联容器和算法一般来说关联容器很少使用算法,因为关联容器的迭代器取到的是const类型,所以像修改、排序等算法就不能使用,但是关联容器可以用作目的位置和源序列,比如:copy(map.begin(),map.end(),back_inserter(vector));

2. 无序关联容器

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。