set的使用
set是什么
set是一个内部有序且不含重复元素的容器
用处
*使得元素自动有序 *去除重复元素
set的引入
# include <set> using namespace std;
set的定义
set<typename> name; //typename可以是任何类型,比如int、float、或者结构体、对象
定义的实际例子
set<int> name; set<float> name; set<double> name; set<node> name;//node是一个结构体 set<typename> array[max_size];//定义一个set类型的数组
set的使用
set内部的元素的访问
set只能通过迭代器来进行访问
//定义迭代器的时候要填写实际的类型 set<typename>::iterator it; set<int>::iterator it; set<char>::iterator it;
除了vector和string外的stl容器都不支持*(it+i)的访问方式
元素的插入
# include <iostream> # include <set> using namespace std; int main(void) { set<int> st; st.insert(3); st.insert(2); st.insert(7); st.insert(1); for(set<int>::iterator it=st.begin();it!=st.end();it++) { cout<<*it<<endl; } return 0; }
set常见函数的使用
insert
insert(x)将x插入set,并自动使得该元素有序且可以去重
find
find(value)查找到集合中值等于value位置的迭代器
# include <iostream> # include <set> using namespace std; int main(void) { set<int> st; for(int i=0;i<4;i++) { st.insert(i); } set<int>::iterator it=st.find(3); cout<<*it<<endl; return 0; }
erase()
erase有两种用法:
1.删除单个元素
1)erase(it),it为要删除元素的迭代器
# include <iostream> # include <set> using namespace std; int main(void) { set<int> st; st.insert(1); st.insert(2); st.insert(3); st.insert(4); st.erase(st.find(2)); for(set<int>::iterator it=st.begin();it!=st.end();it++) { cout<<*it<<' '; } cout<<endl; return 0; }
2)erase(value),value为要删除的值
# include <iostream> # include <set> using namespace std; int main(void) { set<int> st; st.insert(1); st.insert(2); st.insert(3); st.insert(4); st.erase(4); for(set<int>::iterator it=st.begin();it!=st.end();it++) { cout<<*it<<' '; } cout<<endl; return 0; }
2.删除一个区间内的元素
# include <iostream> # include <set> using namespace std; int main(void) { set<int> st; st.insert(1); st.insert(2); st.insert(3); st.insert(4); st.erase(4); set<int>::iterator it=st.find(1); st.erase(it,st.end()); for(set<int>::iterator it=st.begin();it!=st.end();it++) { cout<<*it<<' '; } cout<<endl; return 0; }
size()
用来获取集合元素数量
# include <iostream> # include <set> using namespace std; int main(void) { set<int> st; st.insert(1); st.insert(2); st.insert(3); st.insert(4); st.erase(4); cout<<st.size()<<endl; return 0; }
clear()
清空所有元素
# include <iostream> # include <set> using namespace std; int main(void) { set<int> st; st.insert(1); st.insert(2); st.insert(3); st.insert(4); st.clear(); cout<<st.size()<<endl; return 0; }