其中最簡單的set 特性:
1.值的型態與key的型態相同,且key是唯一,就是任何特定值只能儲存一個。
ex. 可以{1,2,3} 但不能 {1,1,2,3}
2.可反轉、會自動排序。
下面的例子用到了 :
include <algorithm>
set_union : 即兩個集合取聯集
set_intersection : 取交集
set_drfference : 交差集,就是你有我沒有,跟我有你沒有的
成員函數 :
insert() :
lower_bound : 找區間用的
upper_bound :
並利用copy() 來輸出至螢幕以及複製新的空集合。
直接看範例 :
- #include <iostream>
- #include <string>
- #include <set>
- #include <algorithm>
- #include <iterator>
- using namespace std;
- void show(const char c)
- {
- cout << c << " ";
- }
- int main()
- {
- const int N =6;
- string s1[N] = {"buffon", "thinkers", "for", "heavy", "can", "for" };
- string s2[N] = {"metal", "any", "food", "elegant", "deliver", "for"};
- set<string> A(s1, s1+N); //設定A集合範圍從s1 到 s1+N的前一位
- set<string> B(s2, s2+N);
- //設定輸出串流的迭代器,轉接器(adapter)。
- ostream_iterator<string, char> out(cout, " ");
- cout << "Set A: ";
- copy(A.begin(), A.end(), out);
- cout << endl;
- cout << "Set B: ";
- copy(B.begin(), B.end(), out);
- cout << endl << endl;
- //union 聯集
- cout << "Union of A & B:\n";
- set_union(A.begin(), A.end(), B.begin(), B.end(), out);
- cout << endl << endl;
- //intersection 交集
- cout << "Intersection of A & B:\n";
- set_intersection(A.begin(), A.end(), B.begin(), B.end(), out);
- cout << endl << endl;
- //Difference 差集
- cout << "Difference of A & B:\n";
- set_difference(A.begin(), A.end(), B.begin(), B.end(), out);
- cout << endl << endl;
- //設定空集合C,將A,B倒入並取聯集
- set<string> C;
- cout << "Set C:\n";
- set_union(A.begin(), A.end(), B.begin(), B.end(),
- insert_iterator<set<string> >(C, C.begin()));
- copy(C.begin(), C.end(), out);
- cout << endl << endl;
- //c.insert() 插入字串, set會自動排序
- string s3("grungy");
- C.insert(s3);
- cout << "Set C after insertion:\n";
- copy(C.begin(), C.end(), out);
- cout << endl << endl;
- //利用lower_bound upper_bound 表示這些範圍內的資料
- //會呈現比ghost之後,spook之前的文字
- cout << "Showing a range:\n";
- copy(C.lower_bound("ghost"), C.upper_bound("spook"), out);
- cout << endl << endl;
- return 0;
- }
參考來源: c++ primer plus
沒有留言:
張貼留言