基础数据结构->set&&map
set&&map
BEGIN:惜墨如金
set用法
基本用法
#include<bits/stdc++.h>
using namespace std;
void the_set()
{
int x=404;
set<int>ds;
ds.insert(x);//如果在ds这个set 中无x,则插入;否则啥也不干
ds.erase(x);//如果ds在这个set 中有x,则删除;否则不干
auto it=ds.begin();
ds.erase(it);//删除it指向元素
ds.end();//last+1地址
ds.begin();//
/*int l1=*ds.lower_bound(x);//查询不小于x最小的数在集合中的地址,
//否则返回ds.end()
int l2=*ds.upper_bound(x);//查询大于x最小的数在集合中的地址,
//无则返回ds.end()*/
//以上代码有误
int the_x_number=*ds.upper_bound(x)-*ds.lower_bound(x);
//配合可以求出set中有多少x
ds.size();//
return;//OK
}
int main()
{
the_set();
return 0;
}
例题P5250
【深基17.例5】木材仓库
题目描述
博艾市有一个木材仓库,里面可以存储各种长度的木材,但是保证没有两个木材的长度是相同的。作为仓库负责人,你有时候会进货,有时候会出货,因此需要维护这个库存。有不超过 100000 条的操作:
- 进货,格式
1 Length:在仓库中放入一根长度为 Length(不超过 10⁹) 的木材。如果已经有相同长度的木材那么输出Already Exist。 - 出货,格式
2 Length:从仓库中取出长度为 Length 的木材。如果没有刚好长度的木材,取出仓库中存在的和要求长度最接近的木材。如果有多根木材符合要求,取出比较短的一根。输出取出的木材长度。如果仓库是空的,输出Empty。
输入格式
输出格式
样例 #1
样例输入 #1
7
1 1
1 5
1 3
2 3
2 3
2 3
2 3
样例输出 #1
3
1
5
Empty
思路
用set
这题前面可以用if(!ds.insert(a).second) cout<<"Already Exist"<<endl;一行搞定
后面则用lower_bound求出第一接近靠后值 与 第一接近靠前值比对
code_AC
#include<bits/stdc++.h>
using namespace std;
int ccc;
set<int>ds;
void inc(int a)
{
//int num=*( ds.upper_bound(a)-ds.lower_bound(a) );
if(!ds.insert(a).second) cout<<"Already Exist"<<endl;//这行代码借鉴的
return;
}
void outc(int a)
{
int num=*ds.upper_bound(a)-*ds.lower_bound(a);
auto is=ds.lower_bound(a);
if(!ds.size())
{
cout<<"Empty"<<endl;
return;
}
if(num)
{
cout<<*is<<endl;
ds.erase(is);
}
else
{
auto itis=ds.lower_bound(a),jtis=itis;
if(jtis!=ds.begin()) --jtis;
if(itis!=ds.end() && (a-(*jtis) > (*itis)-a))
jtis=itis;
cout<<(*jtis)<<endl;
ds.erase(jtis);
}
return;
}
int main()
{
cin>>ccc;
for(int i=1;i<=ccc;i++)
{
int op;
cin>>op;
if(op==1)
{
int x;
cin>>x;
inc(x);
}
if(op==2)
{
int x;
cin>>x;
outc(x);
}
}
return 0;
}
map用法
基本用法
#include<bits/stdc++.h>
using namespace std;
void the_map()
{
map<string,int>ds;
string kis="kis";
ds[kis]=2;ds["a+a"]=3;ds["b+"]=4;ds["c-"]=5;//这样就可将这个“数组”赋值
ds[kis];//查询ds[kis]的映射值
cout<<ds[kis];//输出
ds.end();
auto isit=ds.begin();
isit=ds.find("kis");//查询x在映射表中的地址
ds.size();
ds.erase("a+a");//删除下标为a+a的元素
return;//OK
}
int main()
{
the_map();
return 0;
}
例题P5266
【深基17.例6】学籍管理
题目描述
您要设计一个学籍管理系统,最开始学籍数据是空的,然后该系统能够支持下面的操作(不超过 $10^5$ 条):
- 插入与修改,格式
1 NAME SCORE:在系统中插入姓名为 NAME(由字母和数字组成不超过 20 个字符的字符串,区分大小写) ,分数为 SCORE (0 < SCORE < 2³¹) 的学生。如果已经有同名的学生则更新这名学生的成绩为 SCORE。如果成功插入或者修改则输出OK。 - 查询,格式
2 NAME:在系统中查询姓名为 NAME 的学生的成绩。如果没能找到这名学生则输出Not found,否则输出该生成绩。 - 删除,格式
3 NAME:在系统中删除姓名为 NAME 的学生信息。如果没能找到这名学生则输出Not found,否则输出Deleted successfully。 - 汇总,格式
4:输出系统中学生数量。
输入格式
输出格式
样例 #1
样例输入 #1
5
1 lxl 10
2 lxl
3 lxl
2 lxl
4
样例输出 #1
OK
10
Deleted successfully
Not found
0
思路
用一个map记录字符串与分数的对应关系
后面没有技术成分了
map模板题
code_AC
#include<bits/stdc++.h>
using namespace std;
int ccc;
map<string,int>stu;
int main()
{
cin>>ccc;
for(int i=1;i<=ccc;i++)
{
int kkk;cin>>kkk;
if(kkk==1)//插入
{
string op;int score;
cin>>op>>score;
stu[op]=score;
cout<<"OK"<<endl;
}
if(kkk==2)//查询
{
string op;cin>>op;
auto isit=stu.find(op);
if(isit==stu.end()) cout<<"Not found"<<endl;
else cout<<stu[op]<<endl;
}
if(kkk==3)//删除
{
string op;cin>>op;
auto isit=stu.find(op);
if(isit==stu.end()) cout<<"Not found"<<endl;
else
{
stu.erase(op);
cout<<"Deleted successfully"<<endl;
}
}
if(kkk==4) cout<<stu.size()<<endl;//汇总
}
return 0;
}
/*
思路
用一个map记录字符串与分数的对应关系
后面没有技术成分了
map模板题
*/
END 日有所进
基础数据结构->set&&map的更多相关文章
- 理解 OpenStack + Ceph (4):Ceph 的基础数据结构 [Pool, Image, Snapshot, Clone]
本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...
- uoj #228. 基础数据结构练习题 线段树
#228. 基础数据结构练习题 统计 描述 提交 自定义测试 sylvia 是一个热爱学习的女孩子,今天她想要学习数据结构技巧. 在看了一些博客学了一些姿势后,她想要找一些数据结构题来练练手.于是她的 ...
- 【UOJ228】基础数据结构练习题(线段树)
[UOJ228]基础数据结构练习题(线段树) 题面 UOJ 题解 我们来看看怎么开根? 如果区间所有值都相等怎么办? 显然可以直接开根 如果\(max-sqrt(max)=min-sqrt(min)\ ...
- Redis基础——剖析基础数据结构及其用法
这是一个系列的文章,打算把Redis的基础数据结构.高级数据结构.持久化的方式以及高可用的方式都讲一遍,公众号会比其他的平台提前更新,感兴趣的可以提前关注,「SH的全栈笔记」,下面开始正文. 如果你是 ...
- 【UOJ#228】基础数据结构练习题 线段树
#228. 基础数据结构练习题 题目链接:http://uoj.ac/problem/228 Solution 这题由于有区间+操作,所以和花神还是不一样的. 花神那道题,我们可以考虑每个数最多开根几 ...
- hrbustoj 1551:基础数据结构——字符串2 病毒II(字符串匹配,BM算法练习)
基础数据结构——字符串2 病毒IITime Limit: 1000 MS Memory Limit: 10240 KTotal Submit: 284(138 users) Total Accepte ...
- hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)
基础数据结构——顺序表(2) Time Limit: 1000 MS Memory Limit: 10240 K Total Submit: 355(143 users) Total Accep ...
- 关于SparkMLlib的基础数据结构 Spark-MLlib-Basics
此部分主要关于MLlib的基础数据结构 1.本地向量 MLlib的本地向量主要分为两种,DenseVector和SparseVector,顾名思义,前者是用来保存稠密向量,后者是用来保存稀疏向量,其创 ...
- Vlc基础数据结构记录
1. Vlc基础数据结构 hongxianzhao@hotmail.com 1.1 基础数据结构 struct vlc_object_t,相关文件为src\misc\objects.c. 定义为: ...
- ES6 之 Set数据结构和Map数据结构 Iterator和for...of循环
ECMAScript 6 入门 Set数据结构 基本用法 ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set本身是一个构造函数,用来生成Set数据结构. va ...
随机推荐
- unsupported operand type(s) for +: 'function' and 'str'
unsupported operand type(s) for +: 'function' and 'str' 报错解释:这个错误表明你尝试将一个函数和一个字符串进行加法操作,在Python中,加法不 ...
- 洛谷 P4343 自动刷题机
题目链接:自动刷题机 思路 二分典题,两个二分判断出可能的最大值和最小值.需要注意当删掉y行代码后,当前代码行数小于0时需要将代码行数重新赋值为0,然后需要注意二分的n最大值的边界,因为x[i]的最大 ...
- TCP,UDP,IP,数据链路层头部详解
UDP头部 可以看到UDP头部由(源端口).(目的端口).(长度)跟(校验和)组成,总共8字节. 源端口:发送方的端口号,16位,即2字节. 目的端口:接收方的端口号,16位,即2字节. 长度:头部+ ...
- arm linux 移植 i2c-tools 与 简单使用
介绍 i2c-tool是一个专门调试i2c的开源工具.可获取挂载的设备及设备地址,还可以在对应的设备指定寄存器设置值或者获取值等功能,对于驱动以及应用开发者比较友好. i2c-tool:v3.0.3 ...
- setsocket、getsocket 函数详解
背景 以前用到socket的时候会调用setsocket进行设置,现在整理有关的笔记的时候,重新查阅资料发现有点奇怪,发现大家比较少使用到这个. setsocket/getsocket #includ ...
- Python 潮流周刊#58:最快运行原型的语言(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- 基于附带Attention机制的seq2seq模型架构实现英译法的案例
模型架构 先上图 我们这里选用GRU来实现该任务,因此上图的十个方框框都是GRU块,如第二张图,放第一张图主要是强调编码器的输出是作用在解码器每一次输入的观点,具体的详细流程图将在代码实现部分给出. ...
- IEC61850方案分享,基于全志、瑞芯微国产平台实现!
什么是IEC61850协议? IEC61850是一种用于在电力自动化系统中进行数据交换和控制的通信协议.它定义了一种标准化的通信和数据模型,以支持设备和系统之间的数据交换和互操作性. IEC61850 ...
- python执行shell并获取结果
在Python中执行Shell命令并获取其结果,通常可以使用subprocess模块.这个模块允许我们启动新的进程,连接到它们的输入/输出/错误管道,并获取它们的返回码.下面是一个详细的示例,展示了如 ...
- 4. 系统I/O
系统 I/O 示例代码: #include <iostream> // 标准库头文件 // #include "myheader.h" // 自己写的头文件 void ...