栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

关联容器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 2
1
2 3
1 2
1
1 2

输出:

1 2 3
1 2
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/729469.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号