C++编程语言STL之set及相关容器介绍

本文主要介绍C++编程语言的STL(Standard Template Library)中set及相关容器的相关知识,同时通过示例代码介绍这些容器的常见用法。

1 概述

关联容器(associative-container)和顺序容器有着根本的不同:关联容器中的元素是按关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的。

虽然关联容器的很多行为与顺序容器相同,但其不同之处反映了关键字的作用。关联容器支持高效的关键字查找和访问。两个主要的关联容器类型为mapset。map中的元素是一些关键字-值(key-value)对:“关键字”起索引的作用,“值”则表示与索引相关联的数据。set中每个元素只包含一个关键字。

2 set

2.1 特性

set的特性如下:

  • 存储顺序:按顺序(默认为升序)存储元素;
  • 值的特点:所有元素值都是唯一的;
  • 底层数据结构:使用二叉搜索树(BST)实现。

2.2 常见用法

2.2.1 构造set

构造set的方法如下(以元素为int类型为例):

set<int> s;

2.2.2 插入元素

向set中插入元素的方法如下:

int i = 1;
s.insert(i);

2.2.3 查看元素出现的次数

查询某元素在set中出现的次数,方法如下(返回0或1):

s.count(i);

2.2.4 使用end()获取最后一个元素

通过end()函数获取set中最后一个元素的方法如下:

auto j = --s.end();

说明:由于end()函数是指向set最后一个元素的下一个位置,因此,需要通过自减符“--”来获取set的最后一个元素。

2.2.5 清空set

通过clear函数可以清空set中的所有元素:

s.clear();

3 multiset

3.1 特性

multiset的特性如下:

  • 存储顺序:按顺序(默认为升序)存储元素;
  • 值的特点:元素值可以重复出现;
  • 底层数据结构:使用二叉搜索树(BST)实现。

3.2 常见用法

3.2.1 构造set

构造multiset的方法如下(以元素为int类型为例):

multiset<int> s;

3.2.2 插入元素

向multiset中插入元素的方法如下:

int i = 1;
s.insert(i);

3.2.3 查看元素出现的次数

查询某元素在multiset中出现的次数,方法如下:

s.count(i);

3.2.4 判断容器是否为空

判断multiset是否为空的方法如下:

s.empty();

4 unordered_multiset

4.1 特性

  • 关键字可以重复;
  • 无序存储元素;
  • 使用哈希表(Hash Table)作为底层数据结构。

4.2 常见用法

4.2.1 构造set

构造unordered_multiset的方法如下(以元素为int类型为例):

unordered_multiset<int> s;

3.2.2 插入元素

向unordered_multiset中插入元素的方法如下:

int i = 1;
s.insert(i);

3.2.3 查看元素出现的次数

查询某元素在unordered_multiset中出现的次数,方法如下(返回元素实际出现次数):

s.count(i);

4 unordered_set

4.1 特性

unordered_set的特性如下:

  • 所有元素值都是唯一的;
  • 无序存储元素;
  • 使用哈希表(Hash Table)作为底层数据结构。

4.2 常见用法

参考set常见用法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

liitdar

赠人玫瑰,手有余香,君与吾共勉

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

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

打赏作者

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

抵扣说明:

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

余额充值