1.set只能insert()、erase(),没有push()等操作

2.插入的元素自动排序按从小到大的顺序排

3.不会插入相同的元素,已经插入了6,之后就不会再插入了

4.时间复杂度为 O(log n)

5.set不像vector那样可以用 v.begin() + 5使用,只能用++ it, -- it, ++ se.begin()来使用

重构函数

set<int> se; // 重构函数(默认)
set<int> se(头地址,尾地址); // 地址 前闭后开

基本操作

se.insert(); // 插入元素
se.erase(); // 删除元素,既可以放地址也可以放要删除的元素
// 上面两个操作 O(log n) se.begin();
se.end(); se.count(); // 由于set中元素唯一,返回值只有1 或者 0
// 判断一个元素是否存在 se.find(); // 放入元素,返回要查找元素的迭代器,没有该元素返回se.end()
// 例如
auto it = se.find(4);
if (it == se.end())
puts("No Exist");
else
puts("Exist"); lower_bound(); // 可以使用,不>= 的元素就返回se.end()
upper_bound(); // 同上

迭代器遍历

for (int x : se) {
cout << x << endl;
} for (auto it = se.begin(); it != se.end(); it ++) {
printf("%d\n", *it);
}

取代堆的一部分功能

// 插入一个元素,输出最大的元素
prev(); // 括号内迭代器 - 1的位置,prev(se.end()) 最后一个元素的迭代器 cout << *prev(se.end()) << endl;
// 输出set中最大的元素 se.erase(prev(se.end())); // 删除set中最大的元素 // 传统堆是不能修改某个元素
// 修改某个元素操作
// a[i] == x -> y
se.erase(x);
se.insert(y); // 完成

set也有缺点,元素都是去重后的,不过我们可以用pair改进

set<pair<int, int>> se;
// se.first指权值,se.second指位置
// 权值相同的话通过位置来区分两个元素 vector<int> v{2, 4, 6, 1, 6};
set<pair<int, int>> se;
for (int i = 0; i < v.size(); i ++) {
se.insert(make_pair(v[i], i));
}
for (pair<int, int> x : se) {
cout << x.first << ' ' << x.second << endl;
}
// 类似这种用法,很迷,结果如下
1 3
2 0
4 1
6 2
6 4
----------------------------------------------------------

STL-set(ACM)的更多相关文章

  1. stl 在 acm中的应用总结

    总结一些在acm中常用的小技巧,小函数 之前尝试着总结过很多次.都失败了,因为总是担心不全,理解的也不是很透彻.这次再来一次...其实之前保存了很多的草稿就不发布了,当然,下面说的很不全面,路过的大牛 ...

  2. c++ stl在acm的入门及使用

    stl的全称为Standard Template Library,即为标准模板库,它主要依赖于模板,而不是对象,所以你需要对这个模板进行实例化,选择你要使用的类型.我们用的都是一些简单的容器吧 这里可 ...

  3. C++ STL泛型编程——在ACM中的运用

    学习过C++的朋友们应该对STL和泛型编程这两个名词不会陌生.两者之间的关系不言而喻,泛型编程的思想促使了STL的诞生,而STL则很好地体现了泛型编程这种思想.这次想简单说一下STL在ACM中的一些应 ...

  4. ACM竞赛常用STL(二)之STL--algorithm

    <algorithm>无疑是STL 中最大的一个头文件,它是由一大堆模板函数组成的.下面列举出<algorithm>中的模板函数: adjacent_find / binary ...

  5. ACM起步要点总结(转哈工大)

    首先,我想说的就是,我是一个很普通的ACMer,高中没有参加过任何计算机和数学竞赛的经历,也没有ben那样过人的天资,努力至今也未能取得什么成绩,我之所以写下这篇文章,只是希望给刚进大学或者刚进ACM ...

  6. 知识点总结——STL相关(持续补充)

    ---恢复内容开始--- C++ STL 与ACM竞赛相关的应用 1.vector vector是动态数组,可以理解为是能够根据需要随时申请内存的动态数组. 常用操作如下: 容量 vec.size() ...

  7. NYOJ528 找球号(三)位运算

    找球号(三) 时间限制:2000 ms  |  内存限制:3000 KB 难度:2   描述 xiaod现在正在某个球场负责网球的管理工作.为了方便管理,他把每个球都编了号,且每个编号的球的总个数都是 ...

  8. Defeat the Enemy UVALive - 7146

      Long long ago there is a strong tribe living on the earth. They always have wars and eonquer other ...

  9. ACM竞赛常用STL(一)

    全排列函数next_permutation STL 中专门用于排列的函数(可以处理存在重复数据集的排列问题) 头文件:#include <algorithm> using namespac ...

  10. ACM: 强化训练-Inversion Sequence-线段树 or STL·vector

    Inversion Sequence Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%lld & %llu D ...

随机推荐

  1. 第四部分:Spdlog日志库的核心组件分析-logger

    Spdlog是一个快速且可扩展的C++日志库,它支持多线程和异步日志记录.在本文中,我们将分析Spdlog日志库的核心代码,探究其实现原理和代码结构. Spdlog的基本架构 上一篇文章介绍了spdl ...

  2. iOS 深色模式适配

    要求:iOS13.0以上 重点:需要所有界面进行适配,工作量巨大,需要从项目开始就进行适配:H5界面无法进行适配 实现方式:System Colors(常用).Semantic Colors(常用). ...

  3. broadcom Ethernet BCM57412 驱动更新记录(dkms方式)

    一 背景 现场Dell R740xd2机器使用网卡Broadcom 57412 10Gb SFP+,固件版本22.21.06.80.bnxt_en.ko内核模块是该网卡的驱动,我们默认的驱动版本为1. ...

  4. python 启动外部程序四种方法

    在Python中,可以方便地使用os模块来运行其他脚本或者程序,这样就可以在脚本中直接使用其他脚本或程序提供的功能,而不必再次编写实现该功能的代码.为了更好地控制运行的进程,可以使用win32proc ...

  5. ASP.NET Core如何知道一个请求执行了哪些中间件?

    第一步,添加Nuget包引用 需要添加两个Nuget包分别是:Microsoft.AspNetCore.MiddlewareAnalysis和Microsoft.Extensions.Diagnost ...

  6. 多进程和多线程,Thread模块 GIL全局解释锁, 进程池与线程池,协程

    1.多进程实现TCP服务端并发: import socket from multiprocessing import Process def get_server(): server = socket ...

  7. Activity中的setContentView(R.layout.xxx)源码分析

    点进去会看到下图: 其中getWindow()是获取到Window类的唯一子类PhoneWindow的对象 找到PhoneWindow的setContentView()方法点进去: 1 @Overri ...

  8. sql求每家店铺销量前三的sku, 附python解法

    背景 有一张表: date store_id sku sales 2023-01-01 CK005 03045 50 date 代表交易日期,store_id代表门店编号,sku代表商品,sales代 ...

  9. 【Spring5】IOC

    1 Spring概念 Spring是轻量级的开源JavaEE框架.可以解决企业开发的复杂性. Spring有两个核心部分:IOC和Aop ①IOC控制反转:把创建对象过程交给Spring管理 ②Aop ...

  10. 从零开始配置深度学习环境:CUDA+Anaconda+Pytorch+TensorFlow

    本文适用于电脑有GPU(显卡)的同学,没有的话直接安装cpu版是简单的.CUDA是系统调用GPU所必须的,所以教程从安装CUDA开始. CUDA安装 CUDA是加速深度学习计算的工具,诞生于NVIDI ...