C++ STL set和multiset

在set关联式容器中,元素是按关键字有序存储的,容器遍历就以此顺序进行。因此,关联式容器不支持push_front和push_back之类的操作,这些操作与它的排序规则相冲突,它不会按这样的方式存取数据,没有支持这些操作的必要。

集合类multiset和set提供了数字(包括字符及串)集合的操作,集合中的数字称为关键字,不需要有另一个值与关键字相关联。set和multiset会根据特定的排序准则,自动将元素排序,亮着提供的操作方法基本相同,只是multiset允许元素重复而set不允许重复。如果向set集合中插入相同的元素,set会忽略它;向multiset集合插入相同元素时,则不会有问题。

(1)set和multiset的定义

set c //建立一个空的set/multiset集合set c(op) //以op为排序准则建立一个空集set c1(c2) //建立一个集合c1,并用c2集合初始化set c(beg,end)  //用区间[beg,end]建立一个集合c

上述形式的set可以是:

set/multiset  //建立T类型,以less<>(从小到大)的排序集合set/multiset  //建立T类型,以op指定排序规则的集合

其中,op可以是less<>或greater<>之一,应用时须在< >中写上类型,如greater。less指定的排序方式为从小到大,greater指定排序方式为从大到小,默认排序方式为less。

(2)set和multiset的赋值比较运算

set和multiset支持 >,>=,<,<=,!=,==比较运算。例如,若有集合c1,c2,可以用c1==c2,c1>c2对它们进行相等或大于判断。另外,可以用赋值运算符“=”进行集合赋值,如c1=c2.

(3)set和multiset计算容量

size()  //计算容器大小empty()  //判断容器是否为空,若为空,则返回0max_size()  //返回容器能够保存的最大元素个数

(4)set和multiset常用操作

count(e)  //计算集合中元素e的个数find(e)  //查找元素中第一次出现元素e的位置lower_bound(e)  //查找集合中第一个“元素值>=e”的位置upper_bound(e)  //查找集合中第一个“元素值>e”的位置insert(e)  //在当前集合中插入元素e;insert(pos,e)  //将e插入到pos位置insert(beg,end)  //将[beg,end]区间内的所有元素都插入到当前集合中eraser(e)  //删除集合中的元素eerase(pos)  //删除集合中指定pos的元素erase(beg,end)  //删除区间[beg,end]的所有元素clear()  //清空集合begin()  //指向第一个元素位置,常与迭代器结合使用end()  //指向最后一个元素位置,常与迭代器结合使用

简例:
 

#include
using namespace std;int main()
{int a1[]={-2,0,30,12,6,7,12,10,9,10};set > set1(a1,a1+7);set >::iterator p1;set1.insert(12); set1.insert(12); set1.insert(4);for(p1=set1.begin();p1!=set1.end();p1++)cout<<*p1<<" ";cout< set2(a2,a2+10);multiset::iterator p2;set2.insert("杜明"); set2.insert("李泽");for(p2=set2.begin();p2!=set2.end();p2++)cout<<*p2<<" ";cout<>sname;p2=set2.begin();bool s=false;  //s用于判定找到姓名与否while(p2!=set2.end()){if(sname==*p2){cout<<*p2<

输出结果:
 

30 12 7 6 4 0 -2
杜明 杜明 黄明昊 李大海 李泽 林海 刘一 王伟 王小二 张青山 张青山 张三
输入要查找的姓名:杜明
杜明
杜明


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部