= b) return a > b; else return a > b; } }; int main() { set
s; //采用比较函数mycomp s.insert(5); //第一次插入5,可以插入 s.insert(1); s.insert(6); s.insert(3); s.insert(5); //第二次插入5,重复元素,不会插入 set
::iterator it; for(it = s.begin(); it != s.end(); it++) cout << *it << " "; cout << endl; return 0; } /* 运行结果:6 5 3 1 */
(2)如果元素是结构体,那么可以直接把比较函数写在结构体内。
?
#include
#include
#include
using namespace std; struct Info { string name; double score; bool operator < (const Info &a) const // 重载“<”操作符,自定义排序规则 { //按score由大到小排序。如果要由小到大排序,使用“>”即可。 return a.score < score; } }; int main() { set
s; Info info; //插入三个元素 info.name = "Jack"; info.score = 80; s.insert(info); info.name = "Tom"; info.score = 99; s.insert(info); info.name = "Steaven"; info.score = 60; s.insert(info); set
::iterator it; for(it = s.begin(); it != s.end(); it++) cout << (*it).name << " : " << (*it).score << endl; return 0; } /* 运行结果: Tom : 99 Jack : 80 Steaven : 60 */
?
?
?
?
?
?
集合的用法
?
#include
#include
#include
using namespace std; int main() { int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 }; set
S( a, a + 9 ); int b[] = { 3, 6, 8, 9 }; set
S2( b, b + 4 ); set
::iterator site; set
Su; set
Si; set
Sd; set
Ssd; //交集 set_intersection( S.begin(), S.end(), S2.begin(), S2.end(), inserter( Si, Si.begin() ) ); //并集 set_union( S.begin(), S.end(), S2.begin(), S2.end(), inserter( Su, Su.begin() ) ); //差集 set_difference( S.begin(), S.end(), S2.begin(), S2.end(), inserter( Sd, Sd.begin() ) ); //对称差集 set_symmetric_difference( S.begin(), S.end(), S2.begin(), S2.end(), inserter( Ssd, Ssd.begin() ) ); site = Si.begin(); cout<<"the intersection of S and S2 is : "; while( site != Si.end() ) { cout<< *site <<" "; ++ site; } cout<