STL-set(ACM)
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)的更多相关文章
- stl 在 acm中的应用总结
总结一些在acm中常用的小技巧,小函数 之前尝试着总结过很多次.都失败了,因为总是担心不全,理解的也不是很透彻.这次再来一次...其实之前保存了很多的草稿就不发布了,当然,下面说的很不全面,路过的大牛 ...
- c++ stl在acm的入门及使用
stl的全称为Standard Template Library,即为标准模板库,它主要依赖于模板,而不是对象,所以你需要对这个模板进行实例化,选择你要使用的类型.我们用的都是一些简单的容器吧 这里可 ...
- C++ STL泛型编程——在ACM中的运用
学习过C++的朋友们应该对STL和泛型编程这两个名词不会陌生.两者之间的关系不言而喻,泛型编程的思想促使了STL的诞生,而STL则很好地体现了泛型编程这种思想.这次想简单说一下STL在ACM中的一些应 ...
- ACM竞赛常用STL(二)之STL--algorithm
<algorithm>无疑是STL 中最大的一个头文件,它是由一大堆模板函数组成的.下面列举出<algorithm>中的模板函数: adjacent_find / binary ...
- ACM起步要点总结(转哈工大)
首先,我想说的就是,我是一个很普通的ACMer,高中没有参加过任何计算机和数学竞赛的经历,也没有ben那样过人的天资,努力至今也未能取得什么成绩,我之所以写下这篇文章,只是希望给刚进大学或者刚进ACM ...
- 知识点总结——STL相关(持续补充)
---恢复内容开始--- C++ STL 与ACM竞赛相关的应用 1.vector vector是动态数组,可以理解为是能够根据需要随时申请内存的动态数组. 常用操作如下: 容量 vec.size() ...
- NYOJ528 找球号(三)位运算
找球号(三) 时间限制:2000 ms | 内存限制:3000 KB 难度:2 描述 xiaod现在正在某个球场负责网球的管理工作.为了方便管理,他把每个球都编了号,且每个编号的球的总个数都是 ...
- Defeat the Enemy UVALive - 7146
Long long ago there is a strong tribe living on the earth. They always have wars and eonquer other ...
- ACM竞赛常用STL(一)
全排列函数next_permutation STL 中专门用于排列的函数(可以处理存在重复数据集的排列问题) 头文件:#include <algorithm> using namespac ...
- ACM: 强化训练-Inversion Sequence-线段树 or STL·vector
Inversion Sequence Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%lld & %llu D ...
随机推荐
- Mybatis应用手册
重学mybatis框架,汇成应用手册,整理mybatis中用法且附相关实例,方便日常回顾 目录结构: ----------------- Github手册地址:https://github.com/x ...
- CTFSHOW-Reverse-刷题记录
re2 打开初步分析为32位程序,无壳,拖入IDA32分析 找到关键行47-50,分析得出各函数内部的基本作用如图所示 首先进入分析输入后的处理 可以很明显看出,是对输入的字符串进行处理后再操作,因此 ...
- 华为人工智能atlasA800-9000物理服务器离线安装及CANN安装和MindSpore安装和Tensorflow安装
目录 华为人工智能atlas A800-9000 物理服务器全程离线安装驱动以及CANN安装部署和MindSpore安装部署和Tensorflow安装部署 A800-9000 物理服务器安装驱动 使用 ...
- 第一章 static、单例与继承
目录 面向对象 一.static关键字 1.static修饰成员变量 2.static修饰成员变量内存中执行原理 3.成员方法的执行原理 4.工具类 5.静态关键字注意事项 6.代码块 java静态代 ...
- Android ViewGroup的事件分发机制-源码分析
为了更好的理解ViewGroup的事件分发机制,我们在自定义一个MyLinerLayout. public class MyLinearLayout extends LinearLayout { pr ...
- resnet18训练自定义数据集
目录结构 dogsData.py import json import torch import os, glob import random, csv from PIL import Image f ...
- 介绍一个.Net远程日志组件
对于软件开发的阶段和正式运行阶段,我们都需要查看日志来诊断出现的问题.不过,在查看日志时需要登录服务器,找到特定的日志文件,再查看其中的内容,这显然不是很方便. 为了解决这个问题,我们可以使用远程日志 ...
- Rust中的Copy和Clone
1.Copy和Clone Rust中的Copy和Clonetrait都允许创建类型实例的副本.它们都提供了一种复制类型实例的方法,但它们之间存在一些重要的区别.了解这些区别有助更好地使用这两个特征. ...
- Spring之AOP理解及使用
文章目录 AOP是什么 AOP Spring的通知类型 1.Before通知 2. AfterReturning通知 3.AfterThrowing通知 4. After通知 5. Around通知 ...
- 关于java中的super
首当其冲先说一下super的用途和含义.他是用于调用一些被重写的方法. 这里还可以复习一下子这个重写:重写是把新的方法放在被重写的方法前面.在被重写的子类中,优先调用重写后的方法.但是如果想要调用原本 ...