c++ set中各种方法的用法

1、Set://集合是有顺序的集合
2、Set.begin();//是其开始的迭代器
迭代器的命名方式:set< int>::iterator it=Set.begin();
Set.end();//是其结束的迭代器
3、Set.count©;//能够判断c是否是其中的元素
4、Set.empty();//判断该集合是否为空
5、Set.equal_range(k);//是双向迭代器会返回两个类似地址
pair<set< int>::const_iterator,set< int>::const_iterator>ret;
ret=Set.equal_range(30);
那么*ret.first表示30 *ret.second表示其后边的那个数据
Set.erase(T)//T可以是该集合中的一个指向一个数据迭代器表示把该数据擦除,也可以是某一个数据表示把开数据擦除
还可以Set.erase(T,M)//T M都是指向数据的迭代器可以把这两个之间的数据包括指向的数据都擦除
Set.find(S)//即返回指向该数据的迭代器如果没有该数据则指向最后一个数据
6、Set.get_allocator()//相当与分配内存空间
int *p;
set< int>s;
p= s.get_allocator().allocate(5);//则表示分配了5个内存 空间相当与大小为5的数组可以这样用p[0]/p[1]……
7、Set.insert(m)表示插入m数据
s1.insert(s2.begin(),s3.end());//可以实现两个集合的合并
8、Set.lower_bound(s)与Set.upper_bound(m)
两种方法与find()方法类似返回迭代器
只是在earse()方法中有所区别
如 10,20,30,40,50,60,70,80,90
earse(find(10),find(50))表示把30和50之间的数据删除
但不删除50
而earse(lower_bound(30),upper_bound(50))则包括50
又有earse(lower_bound(11),upper_bound(56))是与原来一样的结果
而find()找不到该元素时则会指向最后一个元素的迭代器
而这两种方法找不到元素时都会又高到低寻找第一个比该元素小的元素的迭代器
还有一种情况如果在在上面插入一个30的元素在执行earse(lower_bound(30),upper_bound(50)) 是会把两个30的元素都删除的
这里都简单写了没有加方法之前的命名;
9、Set.max_size()返回一个无符号整型的数据表示来该系统下能存储数据的最大数量
10、Set.rbegin() Set.rend()表示反向迭代器即
int myints[] = {21,64,17,78,49};
set< int> myset (myints,myints+5);
set< int>::reverse_iterator rit;//定义反向迭代器
for (rit=myset.rbegin(); rit != myset.rend(); ++rit)
cout << ’ ’ << *rit; 就可以实现反向输出了
11、Set.size()返回当前元素的个数
12、s1.swap(s2)//实现两个集合的交换
13、两个集合是可以按字典序进行比较的

这里再补充一个multiset的一个知识点

multiset 与set的区别就是set在排序之后是不会有重复的元素出现的而multiset是可以有重复元素存在的

另外在这里重新解释一下lower_bound()和upper_bound()的用法

lower_bound(n):找到大于等于n中最小的数的位置

upper_bound(n):找到大于n中最小的数的位置

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值