今天的主题是什么?set容器!
set集合概述
- set是按特定的顺序存储具有相同数据类型元素的容器。在set中不但每个元素的值都唯一,而且系统能根据元素的值自动排序(升序)。
- 注意,set中元素的值不可被修改,因为set容器不支持修改后自动重新进行排序(这样也就意味着一旦有值被修改,原来的有序性就会遭到破坏),所以要修改set中元素的值,本质上是先将其删除,然后再插入一个新的元素(插入后set又会重新排序)。
- 使用set要包含头文件【#include <set>】
创建set集合
set<int> si; // 创建一个存储int类型数据的set
si.insert(6);si.insert(8);si.insert(3);
si.insert(4);si.insert(7);si.insert(1);
/// si实际存储顺序为 1 3 4 6 7 8
set<char> sc; // 创建一个存储char类型数据的set
set<int> sii(si); // 创建一个元素内容和si完全相同的set集合
printf("程序结束..\n");
【set必知必会操作】
以下操作和vector一致,可查看此链接:
【C/C++】深入了解STL标准模板库 001概述+vector 快到碗里来(◕ᴗ◕✿)_BigXMeng的博客-CSDN博客
(1)begin() 和 end()
(2)rbegin() 和 rend()
(3)clear()
(4)empty()
(5)size()
find(elem) 在set中查找元素elem,如果成功找到,则返回指向该元素的双向迭代器;否则返回end()所返回的迭代器
set<int> si; // 创建一个存储int类型数据的set
si.insert(6);si.insert(8);si.insert(3);
/// si实际存储顺序为 3 6 8
set<int>::iterator it1 = si.find(6);
set<int>::iterator it2 = si.find(2);
set<int>::iterator it3 = si.end();
printf("程序结束..\n");
insert(elem) 在set中插入元素elem
erase(elem) 在set中删除元素elem
count(elem) 返回set中有多少个elem元素(由于set中元素都是唯一的,所以存在则返回1,不存在则返回0)
lower_bound(elem) 返回一个指向容器中第一个大于等于elem的元素的迭代器
upper_bound(elem) 返回一个指向容器中第一个大于elem的元素的迭代器
multiset 概述
- multiset是按特定顺序存储元素的容器,与set不同的是,multiset容器可以存储重复的元素。因为包含重复的元素,所以在插入、删除、查找元素上与set有差别。
- 使用multiset容器需要包含头文件【#include <set>】
multiset 必知必会操作
创建multiset对象
multiset<int> ms1; // 创建一个存储int类型数据的multiset
multiset<char> ms2; // 创建一个存储char类型数据的multiset
multiset<double> ms3; // 创建一个存储double类型数据的multiset
multiset<int> ms11{5,7,5,8}; // 实际存储顺序{5,5,7,8}
multiset<int> ms12(ms11); // 创建一个和ms11有相同元素的multiset
count(elem) 返回set中有多少个elem元素
multiset<int> ms1;
ms1.insert(2);
ms1.insert(2);
ms1.insert(2);
ms1.insert(6);
ms1.insert(6);
printf("%d\n", ms1.count(2)); // 3
printf("%d\n", ms1.count(6)); // 2
lower_bound(elem) 返回一个指向容器中第一个大于等于elem的元素的迭代器
/**
* Created By Liu Xianmeng On 2022/11/29
*/
#include <bits/stdc++.h>
using namespace std;
int main(){
multiset<int> ms1;
ms1.insert(2);
ms1.insert(2);
ms1.insert(2);
ms1.insert(6);
ms1.insert(6);
multiset<int>::iterator it = ms1.lower_bound(3);
for(; it != ms1.end(); ++it) printf("%d ", *it);
printf("\n**********************************\n");
multiset<int>::iterator it2 = ms1.upper_bound(3);
for(; it2 != ms1.end(); ++it2) printf("%d ", *it2);
return 0;
/* 打印结果:
* 6 6
* **********************************
* 6 6
*/
}
upper_bound(elem) 返回一个指向容器中第一个大于elem的元素的迭代器
/**
* Created By Liu Xianmeng On 2022/11/29
*/
#include <bits/stdc++.h>
using namespace std;
int main(){
multiset<int> ms1;
ms1.insert(2);
ms1.insert(2);
ms1.insert(2);
ms1.insert(6);
ms1.insert(6);
multiset<int>::iterator it = ms1.lower_bound(3);
for(; it != ms1.end(); ++it) printf("%d ", *it);
printf("\n**********************************\n");
multiset<int>::iterator it2 = ms1.upper_bound(3);
for(; it2 != ms1.end(); ++it2) printf("%d ", *it2);
return 0;
/* 打印结果:
* 6 6
* **********************************
* 6 6
*/
}
erase(elem) 删除multiset中所有的elem元素
insert(elem) 插入某一个元素elem
编程实战 ![](https://i-blog.csdnimg.cn/blog_migrate/358849543fda6a9280e00faca4d5acd5.png)
后续gengxin...
感谢读取~ >.<