您现在的位置是:首页 >技术教程 >[C++] 关联容器网站首页技术教程
[C++] 关联容器
简介[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 p2 | relop是关系运算,关系运算用运算符'<'来实现 |
p1==p2 p1!=p2 | 当first和seconde都相等时,才相等,否则不等 |
1.5 关联容器操作
类型别名:
关联容器额外的类型别名 | 含义 | 操作(map为例) |
key_type | 此容器的关键字类型 | map<string,int>::key_type |
mapped_type | map容器的值类型,只有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. 无序关联容器
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。