STL入门——容器2:set
一、简单介绍
set是STL中一个很有用的容器,用来存储同一种数据类型的数据结构(可以称之为K的模型),基本功能与数组相似。
set与数组不同的是,在set中每个元素的值都是唯一的。
而且set插入数据时,能够根据元素的值自动进行排序。
set中数元素的值并不能直接被改变。
二、set底层
(1)set的底层是红黑树,是红黑树里面K的模型;
K模型:表示只能存放同一种数据类型
KV模型:表示能存放两种数据类型
(2)map的底层也是红黑树,而它是KV模型。
(3)set不允许插入重复数据,而multiset允许插入相同的数据。
三、set常用方法
begin(); //返回set容器的第一个元素 end(); //返回set容器的最后一个元素 clear(); //删除set容器中的所有的元素 empty(); //判断set容器是否为空 max_size(); //返回set容器 size(); //返回当前set容器中的元素个数 rbegin(); //返回的值和end()相同 rend(); //返回的值和rbegin() 相同
四、定义及使用
使用set的头文件是 #include<set>
#include<set>
定义:
set<int> a; // 定义一个int类型的集合a set<int> b(a); // 定义并用集合a初始化集合b set<int> b(a.begin(), a.end()); // 将集合a中的所有元素作为集合b的初始值
数据录入的方式通过for循环:
#include<iostream> #include<set> using namespace std; int main(){ set<int> ss; //可以通过下面的方式进行输入 for(int i=0;i<5;i++){ ss.insert(i); //或者像下面这样 // int x; // cin>>x; // ss.insert(x); } }
数据的输出有点麻烦,需要一点指针的知识
#include<iostream> #include<set> using namespace std; int main(){ set<int> ss; //可以通过下面的方式进行输入 for(int i=0;i<5;i++){ ss.insert(i); //或者像下面这样 // int x; // cin>>x; // ss.insert(x); } //数据输出 set<int>::iterator it = ss.begin(); for(it =ss.begin(); it!=ss.end();it++){ cout<<*it<<" ";// 输出 0 1 2 3 4 } cout<<endl; return 0; }
五、其他函数的使用
1.大小、容量、个数
#include<iostream> #include<set> using namespace std; int main(){ set<int> ss; //可以通过下面的方式进行输入 for(int i=0;i<5;i++){ ss.insert(i); //或者像下面这样 // int x; // cin>>x; // ss.insert(x); } cout << ss.size() << endl; // 输出:5 cout << ss.max_size() << endl; // 输出:461168601842738790 cout << ss.count(2) << endl; // 输出:1 return 0; }
2、删除函数
#include<iostream> #include<set> using namespace std; int main(){ set<int> ss; //可以通过下面的方式进行输入 for(int i=0;i<5;i++){ ss.insert(i); //或者像下面这样 // int x; // cin>>x; // ss.insert(x); } ss.erase(4); // 删除容器中值为elem的元素 set<int>::iterator it = ss.begin(); ss.erase(it); ss.erase(st.begin(), ++st.begin()); // 删除[first,last]之间的元素 ss.clear(); //清空所有元素 return 0; }
3、访问与查找
#include<iostream> #include<set> using namespace std; int main(){ set<int> ss; //可以通过下面的方式进行输入 for(int i=0;i<5;i++){ ss.insert(i); //或者像下面这样 // int x; // cin>>x; // ss.insert(x); } // 通过find(key)查找键值 set<int>::iterator it; it = ss.find(2); cout << *it << endl; // 输出:2 return 0; }
4、交换两个容器元素
#include<iostream> #include<set> using namespace std; int main(){ set<int> st1; st1.insert(1); st1.insert(2); st1.insert(3); set<int> st2; st2.insert(4); st2.insert(5); st2.insert(6); // 交换两个容器的元素 st1.swap(st2); // 遍历显示 cout << "交换后的st1: "; set<int>::iterator it; for (it = st1.begin(); it != st1.end(); it++) cout << *it << " "; // 输出:4 5 6 cout << endl; // 遍历显示 cout << "交换后的st2: "; for (it = st2.begin(); it != st2.end(); it++) cout << *it << " "; // 输出:1 2 3 cout << endl; return 0; }
(adsbygoogle = window.adsbygoogle || []).push({});