STL --- 2、容器 set 和multiset

news/2024/11/25 21:57:07/

std::set 和 std::multiset 都是 STL 中的关联容器,用于存储一组有序的元素。

1、std::set 和 std::multiset 特点

(1)std::set 中每个元素的键值都唯一,而 std::multiset 中可以有多个相同的键值。
(2)std::set 中的元素按照键值大小顺序是按照元素的值从小到大排列的。如果需要按照其他方式排序,可以使用自定义比较函数来实现。

(3)std::set 和 std::multiset 都提供了基本的插入、查找、删除等操作,以及迭代器遍历等功能。它们底层实现使用红黑树,因此插入、查找、删除等操作的时间复杂度都是 O(log n)。

(4)std::set 和 std::multiset 的使用方式类似,可以通过迭代器遍历来访问容器中的元素。

因此,std::set 适合用于需要快速查找、去重的场景,而 std::multiset 适合用于需要保存多个相同键值的场景。

2、std::set 和 std::multiset 常用的api

1. insert(value):将一个值插入到set或multiset中。
2. erase(position):删除set或multiset中指定位置的元素。
3. erase(value):删除set或multiset中所有等于指定值的元素。
4. find(value):查找set或multiset中是否存在等于指定值的元素,如果存在返回该元素的迭代器,否则返回end()。
5. count(value):返回set或multiset中等于指定值的元素个数。
6. size():返回set或multiset中元素的个数。
7. empty():判断set或multiset是否为空。
8. clear():清空set或multiset中的所有元素。
9. lower_bound(value):返回set或multiset中第一个大于等于指定值的元素的迭代器。
10. upper_bound(value):返回set或multiset中第一个大于指定值的元素的迭代器。
11. equal_range(value):返回set或multiset中等于指定值的元素的区间,返回一个pair类型的迭代器,第一个元素是lower_bound返回的迭代器,第二个元素是upper_bound返回的迭代器。

3、std::set 和 std::multiset 的示例

#include <iostream>
#include <set>int main() {// std::set 示例std::set<int> mySet;// 插入元素mySet.insert(3);mySet.insert(1);mySet.insert(4);mySet.insert(1); // 重复元素不会被插入// 遍历元素for (int x : mySet) {std::cout << x << " ";}std::cout << std::endl;// 查找元素auto it = mySet.find(4);if (it != mySet.end()) {std::cout << "Found " << *it << std::endl;} else {std::cout << "Not found" << std::endl;}// std::multiset 示例std::multiset<int> myMultiSet;// 插入元素myMultiSet.insert(3);myMultiSet.insert(1);myMultiSet.insert(4);myMultiSet.insert(1); // 可以插入重复元素// 遍历元素for (int x : myMultiSet) {std::cout << x << " ";}std::cout << std::endl;// 查找元素auto it2 = myMultiSet.find(4);if (it2 != myMultiSet.end()) {std::cout << "Found " << *it2 << std::endl;} else {std::cout << "Not found" << std::endl;}return 0;
}

输出:

1 3 4
Found 4
1 1 3 4
Found 4

在上面的示例中,我们首先创建了两个空的 std::set 和 std::multiset。然后,我们使用 insert() 函数插入一些元素。对于 std::set,重复的元素不会被插入,而对于 std::multiset,可以插入重复的元素。最后,我们使用 find() 函数查找特定元素并输出结果。

需要注意的是,std::set 和 std::multiset 中元素的顺序是按照元素的值从小到大排列的。如果需要按照其他方式排序,可以使用自定义比较函数来实现。

4、std::map和set区别

std::map和std::set都是STL中的关联容器,但它们的主要区别在于:

(1)元素的类型:std::map存储的是键值对,即每个元素都包含一个键和一个值;而std::set只存储键值,即每个元素只包含一个键。

(2)元素的排序:std::map中的元素按照键进行排序,而std::set中的元素按照键进行排序,并且每个键都必须是唯一的。

(3)查找效率:由于std::map中的元素是按照键进行排序的,因此可以通过二分查找等高效算法进行查找;而std::set中的元素也是按照键进行排序的,但由于每个键都必须是唯一的,因此查找效率可能会受到影响。

(4)插入效率:由于std::map和std::set都是基于红黑树实现的,因此插入元素的效率都是O(logn)级别的。

总的来说,std::map适用于需要存储键值对,并且需要按照键进行排序的情况;而std::set适用于只需要存储键,并且需要按照键进行排序,并且每个键都必须是唯一的情况。


http://www.ppmy.cn/news/75069.html

相关文章

Linux搭建MQTT服务器(mosquitto)并使用

零、码仙励志 在路上&#xff0c;寻找一个继续的理由&#xff0c;寻找一个曾经的梦想。 一、Linux搭建MQTT服务器&#xff08;mosquitto&#xff09;并使用 1、安装依赖 yum install gcc-c cmake openssl-devel libuuid-devel c-ares-devel uuid-devel libwebsockets-devel…

HP打印機维护怎么找官方资料

关键词&#xff1a; “Removal and replacement” "part number" 范例 Removal and replacement A7W93 67033 Removal and replacement A7W93-67081 HP PageWide Enterprise, HP PageWide Managed - Removal and replacement: Service fluid container kit | H…

Linux之NetLink学习笔记

1.NetLink机制 NetLink是一种基于应用层跟内核态的通信机制&#xff0c;其特点是一种异步全双工的通信方式&#xff0c;支持内核态主动发起通信的机制。该机制提供了一组特殊的API接口,用户态则通过socket API调用。内核发送的数据再应用层接收后会保存在接收进程socket的缓存…

数据结构与算法之散列表详解

一、散列表概述 散列表&#xff08;Hash Table&#xff09;也叫哈希表&#xff0c;它是一种时间复杂度能够达到接近常数的数据结构&#xff0c;可以用来快速地存储和查找数据。散列表通过哈希函数来将键值对映射为一个索引值&#xff0c;然后通过这个索引值来在数组中访问对应…

【数据库】SQLServer报修表,维修表,反馈表三表连查

大家好&#xff0c;我是雷工&#xff01; 最近参与的一个SCADA项目&#xff0c;客户要求增加设备维保的功能&#xff0c;对设备的报修&#xff0c;维修&#xff0c;反馈过程进行记录查询&#xff0c;进一步提升企业的信息化能力。 该过程的实现是通过创建三个表分别记录报修-维…

【0196】共享内存管理结构(shmem)之创建共享内存分配机制(Shared Memory Allocation)(2)

文章目录 1. 共享内存段(Shared Memory Segment)1.1 设置指向共享内存的基本指针2. 创建共享内存分配机制相关文章: 【0195】共享内存管理结构(shmem)之概念篇(1) 【0

Linux下安装配置maven

1.安装以及配置maven 1.1.下载maven安装包 首先需要切换到自己需要安装的目录 把配置都放到了&#xff1a;/root路径下 1.2.解压下载好的maven包 tar -zxvf apache-maven-3.6.0-bin.tar.gzcp -r apache-maven-3.6.0 /usr/local/1.3.配置maven环境变量 1.3.1.在环境变量中…

maven安装与配置

这里写目录标题 一、maven的下载二、配置环境变量三、setting.xml文件配置四、idea集成maven 一、maven的下载 maven官网 我准备好的maven解压即用&#xff0c;提取码&#xff1a;0221 二、配置环境变量 (1) 我的电脑 -> 属性 -> 高级系统设置 -> 环境变量 -> …