前情回顾
在上一块石碑中,我学到了,同时下一块石碑也显露出来…
🚄上章地址:第九层(7):STL之list
set/multiset
概念
所有插入到set/multiset的数据,都会自动被排序,set/multiset的本质其实是二叉树
区别
set中不可以插入重复的元素
multiset可以插入重复的元素
构造函数
set/multiset的构造有两个,这里拿set的构造举例,multiset与set是一样的
set< T >;//默认构造 set(const set& s);//将s的数据拷贝到本身
使用:
#include<iostream> #include<set> using namespace std; void print(set<int>& s) { for (set<int>::iterator b = s.begin();b != s.end(); b++) { cout << *b << " "; } cout << endl; } void test1() { set<int> s; s.insert(10); print(s); set<int> s1(s); print(s1); } int main() { test1(); return 0; }
赋值函数
对于set/multiset而言,赋值操作只有一个,是操作符重载
set& operator=(const set &s);//将s的值拷贝到本身
使用:
#include<iostream> #include<set> using namespace std; void print(set<int>& s) { for (set<int>::iterator b = s.begin();b != s.end(); b++) { cout << *b << " "; } cout << endl; } void test1() { set<int> s; s.insert(10); print(s); set<int> s1; s1 = s; print(s1); } int main() { test1(); return 0; }
大小操作函数
在set/multiset中,对于大小是不能重新命名的,只能知道有多少个元素,或者是否为空
size()://返回容器中元素个数 empty();//判断容器是否为空
使用:
#include<iostream> #include<set> using namespace std; void test1() { set<int> s; if (s.empty()) { cout << "为空" << endl; } cout << s.size() << endl; } int main() { test1(); return 0; }
交换函数
set中也可以让两个容器之间进行交换,也是swap
swap(s);//和s交换数据
使用:
#include<iostream> #include<set> using namespace std; void print(set<int>& s) { for (set<int>::iterator b = s.begin(); b != s.end(); b++) { cout << *b << " "; } cout << endl; } void test1() { set<int> s; s.insert(1); set<int> s1; s1.insert(0); cout << "交换前" << endl; print(s); print(s1); s.swap(s1); cout << "交换后" << endl; print(s); print(s1); } int main() { test1(); return 0; }
插入函数
在set中,只有一种插入方式
insert(T elem);//插入一个elem
使用:
void test1() { set<int> s; s.insert(1); set<int> s1; s1.insert(0); cout << "交换前" << endl; print(s); print(s1); s.swap(s1); cout << "交换后" << endl; print(s); print(s1); } int main() { test1(); return 0; }
同时验证了,插入进去的数会自己进行排序,排序为从小到大
删除函数
删除函数有四个基本的
clear();//删除容器中所有元素 erase(pos);//删除迭代器pos指向的元素,返回下一个元素的迭代器 erase(beg,end);//删除迭代器beg到end之间的元素,返回下一个元素的迭代器 erase(T elme);//删除容器中所有的elem,在set中是一个,但是multiset中可能有多个
使用:
#include<iostream>
#include<set> using namespace std; void print(set<int>& s) { for (set<int>::iterator b = s.begin(); b != s.end(); b++) { cout << *b << " "; } cout << endl; } void test1() { set<int> s; for (int i = 0; i < 10; i++) { s.insert(i); } print(s); set<int>::iterator b = s.begin(); b++; b++; b++; b++; b++; s.erase(b); print(s); set<int>::iterator b1 = s.begin(); b1++; b1++; b1++; b1++; b1++; s.erase(b1, s.end()); print(s); s.erase(0); print(s); s.clear(); print(s); } int main() { test1(); return 0; }