set代码:
1 #include<stdio.h> 2 #include<set> 3 using namespace std; 4 int main(){ 5 set<int>m; 6 set<int>::iterator iter; 7 set<int>::iterator fir,sec; 8 for(int i=15;i>=0;i-=2)m.insert(i);//set二分排序,且无重复,begin返回开始地址,值为第一个元素的值,end返回最后一个位置的地址,值等于 size的值;count计数值为0或1,iterator接口类似point; 9 m.insert(15);m.insert(15);m.insert(15); 10 printf("size=%d\nbegin=%d\nend=%d\ncount(14)=%d\ncount(15)=%d\n",m.size(),*m.begin(),*m.end(),m.count(14),m.count(15)); 11 for(iter=m.begin();iter!=m.end();iter++)printf("%d ",*iter);//!=换成<就错了;iterator为接口; 12 puts(""); 13 pair<set<int>::const_iterator,set<int>::const_iterator>x; 14 x=m.equal_range(5);/*equal_range() ,返回一对定位器,分别表示*第一个大于或等于*给定关键值的元素和 *第一个大于*给定关键值的元素, 15 这个返回值是一个(pair)类型,如果这一对定位器中哪个返回失败,就会等于end()的值。*/ 16 printf("%d %d\n",*x.first,*x.second);//结果为 5 7 如果x=m.equal_range(4)则结果为5 5; 17 m.erase(x.first,x.second);//erase(iterator) ,删除定位器iterator指向的值;里面也可为一个值;erase(a,b)删除first和second之间的值;a,b为迭代器类型; 自我感觉像free 18 //equal_range函数没什么用,想找的话,可以自己定义一个迭代器,然后通过下列方法找;; 19 for(int i=15;i>=0;i-=2)m.insert(i); 20 fir=m.begin();sec=m.begin(); 21 for(fir,sec;fir!=m.end();fir++,sec++){ 22 if(*fir>=5){ printf("%d\n",*fir); 23 if(*sec>5)printf("%d\n",*sec); 24 else printf("%d\n",*(++sec)); 25 break; 26 } 27 } 28 return 0; 29 }
map代码:
1 #include<cstdio> 2 #include<iostream> 3 #include<map> 4 #include<string> 5 using namespace std; 6 int main(){ 7 map<int,string>student; 8 map<int,string>::iterator iter; 9 map<int,string>::iterator fir,sec; 10 student.insert(pair<int,string>(123456789,"Mike")); 11 student.insert(pair<int,string>(123456789,"MiKE")); 12 student.insert(pair<int,string>(123456790,"jane")); 13 student.insert(pair<int,string>(123456791,"kang")); 14 student.insert(pair<int,string>(123456792,"Rose")); 15 student[123456793]="reder"; 16 student[123456793]="Red"; 17 cout<<"数据:"<<endl; 18 for(iter=student.begin();iter!=student.end();iter++)cout<<iter->first<<" "<<iter->second<<endl; 19 cout<<"find与count的使用"<<endl; 20 if(student.find(123456791)!=student.end())cout<<student.find(123456791)->second<<endl;//find能定位要查找元素的位置。有一点需要注意的是查找的参数是键值!! 21 if(student.count(123456792))cout<<student.count(123456792)<<endl;//count只能单纯的查找元素是否存在, 22 iter=student.begin(); 23 student.erase(iter);cout<<"删除首位:"<<endl; 24 for(iter=student.begin();iter!=student.end();iter++)cout<<iter->first<<" "<<iter->second<<endl; 25 student.erase(123456791); 26 cout<<"键值删除:"<<endl; 27 for(iter=student.begin();iter!=student.end();iter++)cout<<iter->first<<" "<<iter->second<<endl; 28 fir=student.begin();sec=student.end(); 29 student.erase(fir,sec);//或student.clear(); 30 cout<<"利用迭代器范围删除所有数据"<<endl; 31 if(student.empty())puts("all empty"); 32 return 0; 33 }