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
(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
杜明 杜明 黄明昊 李大海 李泽 林海 刘一 王伟 王小二 张青山 张青山 张三
输入要查找的姓名:杜明
杜明
杜明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
