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. 剑指offer 第18天

    第 18 天 搜索与回溯算法(中等) 剑指 Offer 55 - I. 二叉树的深度 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长 ...

  2. Hyperf框架环境搭建

    https://hyperf.wiki/2.2/#/README 1.PHP 7.2 以上查看PHP : php -vcurl 127.0.0.1:9501 查看是否装swoole: php --ri ...

  3. mapState, mapActions

    <template> <div class="box"> <header class="header">分类头部</h ...

  4. MQ(消息队列)常见问题梳理

    MQ 中 broker 的作用,有无broker有什么差异? MQ(Message Queue)中的broker是消息队列的核心组件之一,它的作用是接收.存储.分发和传递消息.具体来说,broker主 ...

  5. Flutter中如何取消任务

    前言 在开发过程中,取消需求是很常见的,但很容易被忽略.然而,取消需求的好处也很大.例如,在页面中会发送很多请求.如果页面被切走并处于不可见状态,就需要取消未完成的请求任务.如果未及时取消,则可能会导 ...

  6. Spring事务——传播性

    传播性 事务传播行为是为了解决业务层方法之间互相调用的事务问题,当一个事务方法被另一个事务方法调用时,事务该以何种状态存在?例如新方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运 ...

  7. 部署:windows7下mysql8.0.18部署安装

    一.前期准备(windows7+mysql-8.0.18-winx64) 1.下载地址:https://dev.mysql.com/downloads/ 2.选择直接下载不登录账号,下载的压缩包大概两 ...

  8. Java Stream常见用法汇总,开发效率大幅提升

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...

  9. 深度学习基础5:交叉熵损失函数、MSE、CTC损失适用于字识别语音等序列问题、Balanced L1 Loss适用于目标检测

    深度学习基础5:交叉熵损失函数.MSE.CTC损失适用于字识别语音等序列问题.Balanced L1 Loss适用于目标检测 1.交叉熵损失函数 在物理学中,"熵"被用来表示热力学 ...

  10. AI人工智能 机器学习 深度学习 学习路径及推荐书籍

    要学习Pytorch,需要掌握以下基本知识: 编程语言:Pytorch使用Python作为主要编程语言,因此需要熟悉Python编程语言. 线性代数和微积分:Pytorch主要用于深度学习领域,深度学 ...