欢迎光临散文网 会员登陆 & 注册

七、关联容器

2023-02-16 18:16 作者:努力赚钱养朵朵  | 我要投稿


本章介绍4种关联容器set、map、unordered_set、unordered_map。

1.顺序容器是同构元素在容器中的位置访问元素;关联容器是通过关键字来保存和访问元素。

2.set用于保存关键字;map用于保存键值对,每个键值对都用一个pair类型存储,其中first成员存储关键字,second成员存储值。

3.注意在关联容器中,关键字唯一,即关键字不可重复出现。

(有关键字可重复的关联容器,但在此不介绍

关联容器概述

  1. 关联容器是根据所存储的关键字来保存和访问容器中的元素的。

  2. 关联容器可以分为有序关联容器set、map和无序关联容器unordered_set、unordered_map。

  3. 有序关联容器的底层数据结构为红黑树,因此查找和访问元素的时间复杂度为O(log n);无序关联容器的底层数据结构为哈希表,查找和访问元素的时间复杂度为O(1)。

  4. 关联容器对象的定义和初始化与顺序容器相似。例如:

关联容器共有的操作

map和unordered_map的下标操作

若定义map或unordered_map类型的对象m,则m[k]将返回关键字k的元素对应的值的引用;若关键字k不在m中,则m中会自动添加一个关键字为k的元素,并对其值做值初始化。

因set和unordered_set本身就是存储关键字,因此不支持下标运算符。

有序关联容器的二分查找操作

自定义有序关联容器和priority_queue的关键字/元素比较方法

1.重载小于运算符(同泛型算法章节中介绍的写法)

2.函数对象/仿函数写法(创建有序关联容器时可传递一个函数对象作为参数指定关键字/元素的比较方法)

因为priority_queue是一个容器适配器,需要使用一个底层容器实现,所以第二个参数需要指定实现的底层容器(一般用vector)。

1)函数对象类(重载函数调用运算符,见泛型算法章节)

2)greater和less(例:priority_queue<int,vector<int>,greater<int>>、map<int,int,greater<int>>)


自定义无序关联容器的关键字哈希函数

其中Hash为自定义哈希函数,可以通过编写函数对象类实现哈希函数。如下定义了一个hash(key)=key mod m(m为表长)的哈希函数:


七、关联容器的评论 (共 条)

分享到微博请遵守国家法律