Set使用攻略

Set使用攻略 By HZ

代码以及文档 (提取码:3b02)

1.Set

set头文件Set包含了C++ stl库里面的很多容器如Set和multiset 等
今天我给大家介绍一下Set和multiset这两个容器的使用方法
先给大家说说,容器就是类似一个数组,系统帮你为这个数组准备了很多函数来管理这个数组,如Set就是由伸展树演变过来的,很快查询修改免去我们打Splay(伸展树)的烦恼了,随随便便就可以种几十棵伸展树。
下面回归正题讲讲怎么使用容器


1.Set容器

#include<set>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
set<int> x;
set<int>::iterator xit;
using namespace std;
int main(){
    printf("-----输入一个n-----\n"); 
    scanf("%d",&n);
    printf("-----输入n个数作为容器的初始值-----\n"); 
    for(int i=1;i<=n;i++){
        scanf("%d",&tmp);
        x.insert(tmp);
    }
    printf("-----Set容器输出样例-----\n"); //这是伸展树中序输出的
    for(xit=x.begin();xit!=x.end();xit++)printf("%d\n",*xit);
}

2. Multiset容器

#include<set>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
multiset<int> x;
multiset <int>::iterator xit;
using namespace std;
int main(){
    printf("-----输入一个n-----\n"); 
    scanf("%d",&n);
    printf("-----输入n个数作为容器的初始值-----\n"); 
    for(int i=1;i<=n;i++){
        scanf("%d",&tmp);
        x.insert(tmp);
    }
    printf("-----multiset容器输出样例-----\n"); //这是伸展树中序输出的
    for(xit=x.begin();xit!=x.end();xit++)printf("%d\n",*xit);
}

大家把程序运行一下看看呗。
Set 和 multiset 容器有什么区别呢?
Code Set.cpp
—–输入一个n—–
7
—–输入n个数作为容器的初始值—–
6 6 5 4 3 2 1 1
—–Set容器输出样例—–
1
2
3
4
5
6
—–multiset容器输出样例—–
1
1
2
3
4
5
6
6
看到了把,Set和Multiset容器都会把里面的数值排序,但是Set会把重复的提走,Multiset就不会啦。


下面给大家推荐一下Set和 multiset容器的常用函数
c++ stl容器成员函数:begin()–返回指向第一个元素的迭代器
c++ stl容器成员函数:clear()–清除所有元素
c++ stl容器成员函数:count()–返回某个值元素的个数
c++ stl容器成员函数:empty()–如果集合为空,返回true
c++ stl容器成员函数:end()–返回指向最后一个元素的迭代器
c++ stl容器成员函数:equal_range()–返回集合中与给定值相等的上下限的两个迭代器
c++ stl容器成员函数:erase()–删除集合中的元素
c++ stl容器成员函数:find()–返回一个指向被查找到元素的迭代器
c++ stl容器成员函数:get_allocator()–返回集合的分配器
c++ stl容器成员函数:insert()–在集合中插入元素
c++ stl容器成员函数:lower_bound()–返回指向大于(或等于)某值的第一个元素的迭代器
c++ stl容器成员函数:key_comp()–返回一个用于元素间值比较的函数
c++ stl容器成员函数:max_size()–返回集合能容纳的元素的最大限值
c++ stl容器成员函数:rbegin()–返回指向集合中最后一个元素的反向迭代器
c++ stl容器成员函数:rend()–返回指向集合中第一个元素的反向迭代器
c++ stl容器成员函数:size()–集合中元素的数目
c++ stl容器成员函数:swap()–交换两个集合变量
c++ stl容器成员函数:upper_bound()–返回大于某个值元素的迭代器
c++ stl容器成员函数:value_comp()–返回一个用于比较元素间的值的函数
度娘找到的精品~


PS:大家利用Set容器的特性试着做完这一道题目。
Test1:明明的随机数
Code明明的随机数.cpp
http://noi.openjudge.cn/ch0110/09/
题目描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复
的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入
有2行,第1行为1个正整数,表示所生成的随机数的N个数。
第2行有N个用空格隔开的正整数,为所产生的随机数
输出
第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小
到大排好序的不相同的随机数。
样例输入

10
20 40 32 67 40 20 89 300 400 15

样例输出

8
15 20 32 40 67 89 300 400


Test2: 输出前k大的数
http://noi.openjudge.cn/ch0203/7617/
Code输出前k大的数.cpp
给定一个数组,统计前k大的数并且把这k个数从大到小输出。
输入
第一行包含一个整数n,表示数组的大小。n < 100000。
第二行包含n个整数,表示数组的元素,整数之间以一个空格分开。每个整数的绝对值不超过100000000。
第三行包含一个整数k。k < n。
输出
从大到小输出前k大的数,每个数一行。
样例输入

10
4 5 6 9 8 7 1 2 3 0
5

样例输出

9
8
7
6
5

Test3: {A} + {B}
http://acm.split.hdu.edu.cn/showproblem.php?pid=1412
Code {A} + {B}.cpp
Problem Description
给你两个集合,要求{A} + {B}.
PS:这道题要定义多一个指针

yit=x.end();yit--;
for(xit=x.begin();xit!=yit;xit++)printf("%d ",*xit);
printf("%d\n",*yit);

Input
每组输入数据分为三行,第一行有两个数字n,m(0

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值