C++关联容器一览

按关键字有序保存元素map关联数组:保存关键字-值对(键值对)
set关键字即值,即只保存关键字的容器
multimap关键字可重复出现的map
multiset关键字可重复出现的set
无序容器unordered_map用哈希函数组织的map
unordered_set用哈希函数组织的set
unordered_multimap哈希组织的map,关键字可重复定义
unordered_multiset哈希组织的set,关键字可重复出现

一、关联容器概述

1.支持方法

方法mapset作用
::at
:begin
:cbegin
::cend
::clear
::count
::crbegin
::crend
::emplace
::emplace_hint
::empty
::end
::equal_range
::erase
::find
get_allocator
::insert
::key_comp
lower_bound
max_size
::operator
::operator[]
::rbegin
::rend
::size
::swap
::upper_bound
::value_comp

2.关联容器的初始化

//空容器
map<string, siez_t> stu_count;

//列表初始化
set<string> color = {"red", "blue", "black", "yellow"};

//用三个元素初始化map,必须键值对一一对应
map<string, uint32_t> authors = {{"Michael", 18},
                                {"Austen", 19},
                                {"Luna", 15}};

//初始化multimap 或 multiset
vector<int> ivec;
for (vector<int>::size_type i = 0; i != 10; ++i) {
    ivec.push_back(i);
    ivec.push_back(i);  //每个数据重复保存一次
}
//iset包含来自ivec的不重复的元素;miset包含所有20个元素
set<ing> iset(ivec.cbegin(), ivec.cend());
multiset<int> miset(ivec,cbegin(), ivec.cend());
cout << ivec.size() << endl;    //打印20
cout << iset.size() << endl;    //打印10
cout << miset.size() << endl;   //打印20

3.pair类型

3.1使用pair必须包含头文件#include <utility>,一个pair保存两个数据成员,类似容器,pair是一个用来生成特定类型的模板,当我们创建一个pair时,我们必须提供两个类型名,就像我们去银行都需要提供名字和身份证号一样

3.2pair的操作

pair<T1, T2> p;p是一个pair,两个类型分别为T1,T2的成员都进行了值初始化
pair<T1, T2> p(v1, v2)p是一个成员类型为T1和T2的pair,first和second成员分别用v1和v2进行初始化
pair<T1, T2>p = (v1, v2)等价于p(v1,v2)
make_pair(v1, v2)

返回一个用v1和v2初始化的pair,pair的类型从v1和v2的类型推导出来

p.first返回p的名为first的(公有)数据成员
p.second返回p的名为second的(公有)数据成员
p1 relop p2关系运算符(<、>、<=、>=)按字典序定义
p1 == p2当first和second成员分别相等时,两个pair相等。相等性判断利用元素的==运算符实现
p1 != p2

3.3例子:函数返回值为一个pair

pair<string,int> process(vector<string> &v)
{
    if (!v.empty())
        return {v.back(), v.back().size()};     //列表初始化
    else
        return pair<string, int>();     //隐式构造返回值:隐式构造一个空pair,并返回它
}

4.关联容器操作

key_type此容器类型的关键字类型
mapped_type每个关键字关联的类型:只适用于map
value_type

对于set,与key_type相同

对于map,为pair<const key_type, mapped_type>

在set中,key_type和value_type是一样的,因为set保存的就是关键字

在map中,每一个元素是键-值对,即每个元素是一个pair对象,pair对象的key_type是const的,我们无法改变

5.关联容器迭代器

6.遍历关联容器

7.关联容器中添加元素

8.关联容器删除元素

9.元素的访问

10.无序容器的使用

桶接口c.bucket_count()正在使用的桶的数目
c.max_bucket_count()容器能容纳的最多的桶的数量
c.bucket_size(n)第n个桶中有多少个元素
c.bucket(k)关键字为k的元素在哪个桶中
桶迭代local_iterator可以用来访问桶中元素的迭代器类型
const_local_iterator桶迭代器的const版本
c.begin(n), c.end(n)桶n的首元素迭代器和尾后迭代器
c.cbegin(n), c.cend(n)与前两个函数类似,但返回const_local_iterator
哈希策略c.load_factor()每个桶的平均元素数量,返回float值
c.max_load_factor()c试图维护的平均桶大小,返回float值。c会在需要时添加新的桶,以使得load_factor<=max_load_factor
c.rehash(n)重组存储,使得bucket_count>=n且bucket_count>size/max_load_factor
c.reserve(n)重组存储,使得c可以保存n个元素且不必rehash

未完,待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值