set 집합 용기 (자주 사용 하 는 방법 요약)

21701 단어
C + + STL 에서 set 집합 용기 에 대한 학습 은 다른 사람의 코드 를 백 번 보 는 것 보다 직접 한 번 쓰 는 것 이 낫다.
set 집합 용 기 를 구성 하 는 목적 은 무 거 운 + 정렬 + 빠 른 검색 을 위 한 것 입 니 다.set 집합 용 기 는 빨 간 검 은 나무 가 많은 균형 이 진 트 리 의 데이터 구 조 를 실현 하기 때문에 삽입 하거나 삭제 할 때 이 진 트 리 를 자동 으로 조정 하여 이 진 트 리 가 항상 새로운 균형 을 유지 할 수 있 습 니 다.set 를 제외 하고 multiset, map, multimap 의 내부 구조 도 균형 이 잡 힌 이 진 트 리 입 니 다.
  
  1 /*  C++STL set       ,         ,         。
  2 set                ,                  ,          ,
  3   4 */ 
  5 #include <set>//   , multiset   
  6 #include 
  7 using namespace std;
  8 
  9 //       myComp,  "()"   
 10 struct myComp{
 11     bool operator () (const int &a,const int &b){
 12         return a>b;//     
 13     }  
 14 };
 15 
 16 //             
 17 struct STUDENT{
 18     string name;
 19     double score;
 20     
 21     //  "
 22     bool operator < (const STUDENT &a) const{
 23         // score      。        ,  ">"    
 24         return a.score < score;
 25     } 
 26 }; 
 27 
 28 void print(set<int> s);
 29 void rprint(set<int> s); 
 30 
 31 int main()
 32 {
 33     /*  set    ,   set        */
 34     set<int> s;//          int     s,        
 35     
 36     /*        (             )*/
 37     //          ,           ,  set                  
 38     //             
 39     s.insert(8);//     8,    
 40     s.insert(1);
 41     s.insert(6);
 42     s.insert(12);
 43     s.insert(8);//     8,    ,     ,         
 44      
 45     //              
 46     set<int>::iterator it;//       
 47     for(it=s.begin(); it != s.end(); it++){
 48         cout<' '; 
 49     } 
 50     cout<<endl;
 51     /*    
 52     1 6 8 12
 53     */
 54     //              
 55     set<int>::reverse_iterator rit;
 56     for(rit=s.rbegin(); rit != s.rend();rit++){
 57         cout<' ';
 58     } 
 59     cout<<endl;
 60     /*    
 61     12 8 6 1
 62     */
 63     
 64     /*                    ,   find()  ,                ,
 65       ,                 , end()*/
 66     set<int>::iterator it1;//       find()       
 67     it1=s.find(12);
 68     if(it1 != s.end())
 69         cout<<"      "<"   
"; 70 it1=s.find(2); 71 if(it1 == s.end()) 72 cout<<" 1
"; 73 /* 74 12 75 1 76 */ 77 78 /* */ 79 // , erase() 80 cout<<"
"; 81 print(s); 82 s.erase(6);// 6 83 cout<<"
"; 84 print(s); 85 /* 86 87 1 6 8 12 88 89 1 8 12 90 */ 91 92 // 93 cout<<"
"; 94 print(s); 95 s.clear(); 96 cout<<"
"; 97 print(s); 98 /* 99 100 1 8 12 101 102 103 */ 104 105 /* insert() , 。 106 */ 107 108 /* */ 109 // , main 110 set<int,myComp> ss; 111 ss.insert(8);// , , 112 ss.insert(1); 113 ss.insert(12); 114 ss.insert(6); 115 116 set<int,myComp>::iterator it2;// 117 for(it2=ss.begin(); it2 != ss.end(); it2++){ 118 cout<' '; 119 } 120 cout<<endl; 121 /* 122 12 8 6 1 123 */ 124 125 // , , main 126 set students; 127 STUDENT someone; 128 someone.name="Jack"; 129 someone.score=80.5; 130 students.insert(someone); 131 132 someone.name="Tomi"; 133 someone.score=57.5; 134 students.insert(someone); 135 136 someone.name="Nacy"; 137 someone.score=60.5; 138 students.insert(someone); 139 140 set::iterator it3;// 141 for(it3=students.begin(); it3 != students.end();it3 ++){ 142 cout<":"<endl; 143 } 144 /* 145 Jack:80.5 146 Nacy:60.5 147 Tomi:57.5 148 */ 149 return 0; 150 } 151 152 void print(set<int> s) 153 { 154 set<int>::iterator it;// 155 for(it=s.begin(); it != s.end(); it++){ 156 cout<' '; 157 } 158 cout<<endl; 159 } 160 161 void rprint(set<int> s) 162 { 163 set<int>::reverse_iterator rit;// 164 for(rit=s.rbegin(); rit != s.rend();rit++){ 165 cout<' '; 166 } 167 cout<<endl; 168 }

 
다음으로 전송:https://www.cnblogs.com/wenzhixin/p/8508549.html

좋은 웹페이지 즐겨찾기