set和multiset使用方法 (STL)

来源:互联网 发布:超星网络课答案 编辑:程序博客网 时间:2024/05/21 22:40

set容器是关联式容器,它封装的数据结构是二叉树,而且是一种高效的平衡二叉树——红黑树,它的统计性能高于一般的平衡二叉树。声明的每个set容器中只能存放一种数据类型的数据,而且值不会重复出现,容器会自动升序排列存放数据,容器中的数据元素不能直接 被修改。

1.insert函数,可以通过value来插入,也可以通过指针范围插入,插入[first,last)之间的值,不过有的编译器不支持指针范围插入
set<int>test;
set<int>help;
set<int>::iterator t;
t=help.begin();
test.insert(5);//通过value插入
test.insert(*t);//通过指针所指的value插入
test.insert(help.begin(),help.end());//范围插入


2.erase函数,可以通过value直接删除,可以通过地址删除,也可以范围删除。
set<int>test;
set<int>::iterator t;
test.erase(5); //通过value删除
t=test.begin();
test.erase(t); //通过地址删除
test.erase(test.begin(),test.end());//范围删除


3.begin(),end(),rbegin(),rend()遍历函数,begin()和end()正向遍历集合,rbegin()和rend()逆向遍历集合。
begin()返回集合第一个元素地址,end()返回最后一个元素后面的结束标识,遍历时迭代指针t++即可正向遍历;
rbegin()返回集合最后一个元素地址,rend()返回第一个元素前面的开始标识,遍历时逆向迭代指针s++即可逆向遍历;
set<int>test;
set<int>::iterator t;
set<int>::reverse_iterator s;
t=test.begin();
while(t!=test.end())
{
cout<<*t<<" ";
t++;
}//正向遍历
s=test.rbegin();
while(s!=test.rend())
{
cout<<*s<<" ";
s++;
}//逆向遍历


4.lower_bound()函数返回大于等于value的指针,由于集合是升序存放,返回的当然只是找到的第一个符合条件的指针。
upper_bound()函数返回大于value的指针。如果没有找到则返回end()。
set<int>test;
set<int>::iterator t;
t=test.lower_bound(7);
if(t!=test.end())cout<<*t<<endl;
else cout<<"can not find it."<<endl;


5.find()函数返回指向value的指针,找不到就返回end();
set<int>test;
set<int>::iterator t;
t=test.find(11);
if(t!=test.end())cout<<*t<<endl;
else cout<<"can not find it."<<endl;


6.count()函数返回value的个数,在set容器中由于没有重复值,所以只能返回0或1,在multiset中可以返回其它值。
set<int>test;
int ans;
ans=test.count(4);//返回value=4的个数


7.swap()函数将两个容器里的所有元素互换。
set<int>test;
set<int>help;
test.swap(help);//也可以理解为将两个容器的名称互换了,容器里的元素未变


8.size()函数返回容器元素的个数。
set<int>test;
int ans;
ans=test.size();//计算容器元素的个数


9.empty()函数判断容器是否为空,为空返回1,否则返回0。
set<int>test;
if(test.empty())cout<<"test is empty."<<endl;
else cout<<"it not empty."<<endl;

10.multiset中可以存在多个value值相同,函数的使用和set是一样的;
equal_range()函数返回值为value的首尾指针[first,last),主要用在multiset中多值重复的情况。
multiset<int>now;
multiset<int>::iterator x;
pair<multiset<int>::iterator,multiset<int>::iterator> xy;
    xy=now.equal_range(3);
x=xy.first;
while(x!=xy.second)
{
cout<<*x<<"  ";
x++;
}

11.set初始化时复制构造函数。
set<int>test;
set<int>ttt(test); //将test中的函数初始化到ttt容器中
set<int>xxx(test.begin(),test.end());//[first,last)范围初始化,本编译器不支持

#include <iostream>#include <set>#include <stdio.h>using namespace std;int main(){set<int>test;set<int>help;set<int>::iterator t;int a[6]={2,3,2,3,5,7};int i,j,ans;for(i=0;i<6;i++){test.insert(a[i]);  //单值insert}t=test.begin();cout<<"all member in test: ";while(t!=test.end()){cout<<*t<<"  ";t++;}    cout<<endl;cout<<"number of members in test is: "<<test.size()<<endl;cout<<"whether is test empty : "<<test.empty()<<"\n"<<endl;    //////指定位置的单值insertt=test.end();test.insert(t,9);    t=test.begin();cout<<"all member in test: ";while(t!=test.end()){cout<<*t<<"  ";t++;}    cout<<endl;cout<<"number of members in test is: "<<test.size()<<"\n"<<endl;    //////通过指针所指的值实现单值insert;help.insert(11);t=help.begin();test.insert(*t);    t=test.begin();cout<<"all member in test: ";while(t!=test.end()){cout<<*t<<"  ";t++;}    cout<<endl;cout<<"number of members in test is: "<<test.size()<<"\n"<<endl;    //////单值erasetest.erase(2);    t=test.begin();cout<<"all member in test: ";while(t!=test.end()){cout<<*t<<"  ";t++;}    cout<<endl;cout<<"number of members in test is: "<<test.size()<<"\n"<<endl;//////直接erase指针t=test.begin();test.erase(t);t=test.begin();cout<<"all member in test: ";while(t!=test.end()){cout<<*t<<"  ";t++;}    cout<<endl;cout<<"number of members in test is: "<<test.size()<<"\n"<<endl;//////通过指针范围批量erase/*test.erase(test.begin(),test.end());t=test.begin();cout<<"all member in test: ";while(t!=test.end()){cout<<*t<<"  ";t++;}    cout<<endl;cout<<"number of members in test is: "<<test.size()<<endl;cout<<"whether is test empty : "<<test.empty()<<"\n"<<endl;    *///////逆向迭代的指针set<int>::reverse_iterator tt;tt=test.rbegin();cout<<"all member in test: ";while(tt!=test.rend()){cout<<*tt<<"  ";tt++;}    cout<<endl;cout<<"number of members in test is: "<<test.size()<<"\n"<<endl;//////lower_bound返回>=value的指针,upper_bound返回>value的指针t=test.lower_bound(9);cout<<"the position test>=9 is : "<<*t<<endl;t=test.upper_bound(9);cout<<"the position test>9 is : "<<*t<<"\n"<<endl;//////计算某个value的个数cout<<"the number of 9 in test is : "<<test.count(9)<<endl;cout<<"the number of 100 in test is : "<<test.count(100)<<"\n"<<endl;//////查找某个value,返回其地址t=test.find(7);cout<<"what you can find is : "<<*t<<"\n"<<endl;//////两个容器所有元素互换cout<<"before swap:"<<endl;t=test.begin();cout<<"all member in test: ";while(t!=test.end()){cout<<*t<<"  ";t++;}    cout<<endl;t=help.begin();cout<<"all member in help: ";while(t!=help.end()){cout<<*t<<"  ";t++;}    cout<<endl;    test.swap(help);cout<<"after swap:"<<endl;t=test.begin();cout<<"all member in test: ";while(t!=test.end()){cout<<*t<<"  ";t++;}    cout<<endl;t=help.begin();cout<<"all member in help: ";while(t!=help.end()){cout<<*t<<"  ";t++;}    cout<<"\n"<<endl;    //////multiset允许重复元素值出现multiset<int>now;multiset<int>::iterator x;multiset<int>::iterator y;for(i=0;i<6;i++){now.insert(a[i]);}x=now.begin();cout<<"all member in now: ";while(x!=now.end()){cout<<*x<<"  ";x++;}    cout<<endl;cout<<"number of members in now is: "<<now.size()<<"\n"<<endl;//////所有value=2的元素都会被删除now.erase(2);x=now.begin();cout<<"all member in now: ";while(x!=now.end()){cout<<*x<<"  ";x++;}    cout<<endl;cout<<"number of members in now is: "<<now.size()<<"\n"<<endl;//////范围查找,找到value=3的元素首尾地址,返回[first,last)pair<multiset<int>::iterator,multiset<int>::iterator> xy;xy=now.equal_range(3);cout<<"what you can find is : ";x=xy.first;while(x!=xy.second){cout<<*x<<"  ";x++;}cout<<"\n"<<endl;    //////count值为3的个数    cout<<"the number of 3 in now is: "<<now.count(3)<<endl;return 0;}

输出结果如下:

all member in test: 2  3  5  7number of members in test is: 4whether is test empty : 0all member in test: 2  3  5  7  9number of members in test is: 5all member in test: 2  3  5  7  9  11number of members in test is: 6all member in test: 3  5  7  9  11number of members in test is: 5all member in test: 5  7  9  11number of members in test is: 4all member in test: 11  9  7  5number of members in test is: 4the position test>=9 is : 9the position test>9 is : 11the number of 9 in test is : 1the number of 100 in test is : 0what you can find is : 7before swap:all member in test: 5  7  9  11all member in help: 11after swap:all member in test: 11all member in help: 5  7  9  11all member in now: 2  2  3  3  5  7number of members in now is: 6all member in now: 3  3  5  7number of members in now is: 4what you can find is : 3  3the number of 3 in now is: 2Press any key to continue




原创粉丝点击