- set的定義
set<typename> name;
typename可以是任何基本型別,如int、double、char、結構體等,也可以是STL標準容器,如vector、set、queue等,
set<int> name; set<double> name; set<char> name; set<node> name; //node是結構體型別
- set容器內元素的訪問
set只能通過迭代器訪問:
set<typename>::iterator it;
例如下面的代碼:
1 #include <iostream> 2 #include <set> 3 using namespace std; 4 set<int> st; 5 int main() 6 { 7 st.insert(2); 8 st.insert(5); 9 st.insert(2); 10 st.insert(6); 11 st.insert(2); 12 for(set<int>::iterator it=st.begin(); it!=st.end(); it++){ 13 cout<<*it<<" "; 14 } 15 return 0; 16 }
輸出結果: 2 5 6
從輸出結果我們能發現,set內的元素自動遞增排序,并且自動去除了重復元素,
- set常用函式
(1)insert()
insert(x)可以將x插入到set容器中,自動遞增排序并去重,時間復雜度為O(logN),其中N為set內的元素個數,前面的例子即說明了這一點,
(2)find()
find(v)回傳set中對應的v的迭代器,時間復雜度為O(logN),其中N為set內的元素個數,
1 #include <iostream> 2 #include <set> 3 using namespace std; 4 set<int> st; 5 int main() 6 { 7 for(int i=0;i<5;i++){ 8 st.insert(i+1); 9 } 10 set<int>::iterator it=st.find(1); 11 cout<<*it; 12 return 0; 13 }
輸出結果: 1
(3)erase()
erase()可以洗掉單個元素,也可以洗掉一個區間內的所有元素,
① 洗掉單個元素
st.erase(it),it為所需要洗掉元素的迭代器,時間復雜度為O(1),
1 #include <iostream> 2 #include <set> 3 using namespace std; 4 set<int> st; 5 int main() 6 { 7 st.insert(100); 8 st.insert(200); 9 st.insert(200); 10 st.insert(300); 11 st.erase(st.find(200)); //利用find()函式找到200,然后用erase洗掉它 12 for(set<int>::iterator it=st.begin(); it!=st.end(); it++){ 13 cout<<*it<<" "; 14 } 15 return 0; 16 }
輸出結果: 100 300
st.erase(v),v為所需要洗掉元素的值,時間復雜度為O(logN),其中N為set內的元素個數,
1 #include <iostream> 2 #include <set> 3 using namespace std; 4 set<int> st; 5 int main() 6 { 7 st.insert(100); 8 st.insert(200); 9 st.insert(200); 10 st.insert(300); 11 st.erase(200); //洗掉set中值為200的元素 12 for(set<int>::iterator it=st.begin(); it!=st.end(); it++){ 13 cout<<*it<<" "; 14 } 15 return 0; 16 }
輸出結果: 100 300
② 洗掉一個區間內的所有元素
st.erase(first, last)可以洗掉一個區間內的所有元素,其中first為所需要洗掉區間的起始迭代器,而last則為所需要洗掉區間的末尾迭代器的下一個地址,即洗掉[first,last),時間復雜度為O(last-first),
1 #include <iostream> 2 #include <set> 3 using namespace std; 4 set<int> st; 5 int main() 6 { 7 st.insert(100); 8 st.insert(200); 9 st.insert(300); 10 st.insert(400); 11 set<int>::iterator it=st.find(200); 12 st.erase(it,st.end()); //洗掉元素200至set末尾之間的元素 13 for(set<int>::iterator it=st.begin(); it!=st.end(); it++){ 14 cout<<*it<<" "; 15 } 16 return 0; 17 }
輸出結果: 100
(4)size()
size()用來獲得set內元素的個數,時間復雜度為O(1),
1 #include <iostream> 2 #include <set> 3 using namespace std; 4 set<int> st; 5 int main() 6 { 7 st.insert(1); 8 st.insert(2); 9 st.insert(3); 10 st.insert(4); 11 cout<<st.size(); 12 return 0; 13 }
輸出結果: 4
(5)clear()
clear()用來清空set中的所有元素,時間復雜度O(N),其中N為set內的元素個數,
1 #include <iostream> 2 #include <set> 3 using namespace std; 4 set<int> st; 5 int main() 6 { 7 st.insert(1); 8 st.insert(2); 9 st.insert(3); 10 st.insert(4); 11 st.clear(); //清空set 12 cout<<st.size(); 13 return 0; 14 }
輸出結果: 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/285759.html
標籤:其他
