set/ multiset 容器
C++标准模板库(STL)为我们提供了丰富的数据结构,其中 set
和 multiset
是两种特别有用的容器,它们基于红黑树实现,为元素提供了自动排序的功能。在本文中,我们将从基础概念开始,逐步深入到实际应用。
set基本概念
简介:
- 所有元素都会在插入时自动被排序
本质:
- set/multiset属于关联式容器,底层结构是用红黑树实现。
set和multiset区别:
- set不允许容器中有重复的元素
- multiset允许容器中有重复的元素
set构造和赋值
功能描述:
创建set容器以及赋值
构造:
set<T> st;
默认构造函数set(const set &st);
拷贝构造函数
赋值:
set& operator=(const set &st);
重载等号操作符
示例:
#include <iostream>
#include <set>
using namespace std;
void printSet(set<int> & s) {
for (set<int>::iterator it = s.begin(); it != s.end(); it++) {
cout << *it << " ";
}
cout << endl;
}
//set容器的构造和赋值
void test1() {
//默认构造
set<int> s1;
//插入元素
s1.insert(10);
s1.insert(30);
s1.insert(20);
s1.insert(40);
s1.insert(10);
//遍历容器
//set容器特点:所有元素插入时自动排序,且容器中不允许有重复元素
printSet(s1);
//拷贝构造
set<int> s2(s1);
printSet(s2);
//赋值
set<int> s3;
s3 = s2;
printSet(s3);
}
int main() {
test1();
return 0;
}
总结:
- set容器插入数据时用insert
- set容器插入数据的数据会自动排序
set大小和交换
功能描述:
- 统计set容器大小以及交换set容器
函数原型:
size();
返回容器中元素的数目empty();
判断容器是否为空swap(st);
交换两个集合容器
示例:
#include <iostream>
#include <set>
using namespace std;
void printSet(set<int> & s) {
for (auto elem : s) {
cout << elem << " ";
}
cout << endl;
}
//大小
void test1() {
set<int> s1;
s1.insert(10);
s1.insert(30);
s1.insert(20);
s1.insert(40);
printSet(s1);
if (s1.empty()) {
cout << "s1为空" << endl;
} else {
cout << "s1不为空" << endl