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;
}
