欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

算法训练营训练集合合并(关联容器set)

时间:2023-07-21
关联容器set

STL提供4种关联容器:set、multiset、map、multimap。关联容器将值和键关联在一起,通过键来查找值。这4种容器都是可反转的经过排序的关联容器,不可以指定插入位置,因为需要保持有序性,可提供对元素的快速访问,内部采用红黑树实现。
set是有序集合,键和值是统一的,值就是键,set每个键都是唯一的,不允许重复;使用时需要引入头文件#include
set的迭代器为双向访问,不支持随机访问。执行一次++和–操作的时间复杂度均为 O ( l o g n ) O(logn) O(logn)。默认的元素顺序为升序,也可以通过第2个模板的参数设置为降序。

set a;//升序set > a;//greater排序函数,降序

size/empty/clear:元素个数、判空、清空。begin/end:开始位置和结束位置。insert(x):将元素x插入合集。erase(x):删除所有等于x的元素。erase(it):删除it迭代器指向的元素。find(x):查找元素x在集合中的位置,若不存在,则返回end。count(x):统计等于x的元素个数。
-lower_bound/upper_bound:返回大于等于x的最小元素位置、大于x的最小元素位置。 题目描述

给定两个集合 A A A、 B B B,求 A + B A+B A+B(在同一个集合中不会有两个相同的元素)。

输入:每组输入数据均分为三行。第1行包含两个整数n和m(0 < n,m leq 10000),分别表示集合A和集合B中的元素个数;后两行分别表示集合A和集合B中的元素,元素之间以一个空格隔开。

输出:单行输出合并后的集合,要求从小到大输出,元素间以一个空格隔开。

#include #include using namespace std;int main(){ set sum; int n,m; while(~scanf("%d %d", &n,&m)){ sum.clear(); for (int i = 0; i < n; ++i) { int x; scanf("%d",&x); sum.insert(x); } for (int i = 0; i < m; ++i) { int x; scanf("%d",&x); sum.insert(x); } for (auto it = sum.begin();it!=sum.end();it++) { if(it!=sum.begin()){//除第一个数据外其他数据在输出时前面要加空格 printf(" "); } printf("%d",*it); } printf("n"); } return 0;}

输入:

1 212 31 211 2

输出:

1 2 31 2

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。