关于map与set的一点理解;

时间:2023-03-09 08:52:53
关于map与set的一点理解;

set代码:

 #include<stdio.h>
#include<set>
using namespace std;
int main(){
set<int>m;
set<int>::iterator iter;
set<int>::iterator fir,sec;
for(int i=;i>=;i-=)m.insert(i);//set二分排序,且无重复,begin返回开始地址,值为第一个元素的值,end返回最后一个位置的地址,值等于 size的值;count计数值为0或1,iterator接口类似point;
m.insert();m.insert();m.insert();
printf("size=%d\nbegin=%d\nend=%d\ncount(14)=%d\ncount(15)=%d\n",m.size(),*m.begin(),*m.end(),m.count(),m.count());
for(iter=m.begin();iter!=m.end();iter++)printf("%d ",*iter);//!=换成<就错了;iterator为接口;
puts("");
pair<set<int>::const_iterator,set<int>::const_iterator>x;
x=m.equal_range();/*equal_range() ,返回一对定位器,分别表示*第一个大于或等于*给定关键值的元素和 *第一个大于*给定关键值的元素,
这个返回值是一个(pair)类型,如果这一对定位器中哪个返回失败,就会等于end()的值。*/
printf("%d %d\n",*x.first,*x.second);//结果为 5 7 如果x=m.equal_range(4)则结果为5 5;
m.erase(x.first,x.second);//erase(iterator) ,删除定位器iterator指向的值;里面也可为一个值;erase(a,b)删除first和second之间的值;a,b为迭代器类型; 自我感觉像free
//equal_range函数没什么用,想找的话,可以自己定义一个迭代器,然后通过下列方法找;;
for(int i=;i>=;i-=)m.insert(i);
fir=m.begin();sec=m.begin();
for(fir,sec;fir!=m.end();fir++,sec++){
if(*fir>=){ printf("%d\n",*fir);
if(*sec>)printf("%d\n",*sec);
else printf("%d\n",*(++sec));
break;
}
}
return ;
}

map代码:

 #include<cstdio>
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main(){
map<int,string>student;
map<int,string>::iterator iter;
map<int,string>::iterator fir,sec;
student.insert(pair<int,string>(,"Mike"));
student.insert(pair<int,string>(,"MiKE"));
student.insert(pair<int,string>(,"jane"));
student.insert(pair<int,string>(,"kang"));
student.insert(pair<int,string>(,"Rose"));
student[]="reder";
student[]="Red";
cout<<"数据:"<<endl;
for(iter=student.begin();iter!=student.end();iter++)cout<<iter->first<<" "<<iter->second<<endl;
cout<<"find与count的使用"<<endl;
if(student.find()!=student.end())cout<<student.find()->second<<endl;//find能定位要查找元素的位置。有一点需要注意的是查找的参数是键值!!
if(student.count())cout<<student.count()<<endl;//count只能单纯的查找元素是否存在,
iter=student.begin();
student.erase(iter);cout<<"删除首位:"<<endl;
for(iter=student.begin();iter!=student.end();iter++)cout<<iter->first<<" "<<iter->second<<endl;
student.erase();
cout<<"键值删除:"<<endl;
for(iter=student.begin();iter!=student.end();iter++)cout<<iter->first<<" "<<iter->second<<endl;
fir=student.begin();sec=student.end();
student.erase(fir,sec);//或student.clear();
cout<<"利用迭代器范围删除所有数据"<<endl;
if(student.empty())puts("all empty");
return ;
}