Gym - 100989D 题学习stl中的set<pair<int ,int > >

题目网址链接:https://vjudge.net/problem/387095/origin

题目大意:给出桌子数和桌子容纳人数,给出几条操作,操作如下:给出顾客人数,问是否有能容纳顾客且桌子标号和桌子容纳人数与顾客人数差值同时最小的桌子,有即输出桌子编号,没有输出-1;期间会有顾客离开,给出离开的桌子编号。

在做题之前,先学习STL中的set:以集合形式从小到大排列set中的元素。

先给出几个大牛博客链接:

https://www.cnblogs.com/zyxStar/p/4542835.html

https://blog.csdn.net/sunquana/article/details/39855355

https://blog.csdn.net/bingqingsuimeng/article/details/73480190

set<pair<int ,int > >的笔记:

1:> >两个‘>‘中药有空格.

2:pair<x,y>,中x,y可以为任何类型的常量,如int,char,但是调用x用first表示,y用second表示,eg:看代码。

3:将pair<int ,int >放入set中要有make_pair(int,int);至于为什么,本人不清楚,好像是由于将pair类型变下。

4:set中存入pair,比较的方法是先比较first,在比较second。

5:end()所指的是最后一个元素后面的位子。

知道了这些,解决这题就非常简单了。代码如下:

 1 #include<iostream>
 2 #include<set>
 3 using namespace std;
 4 int a[100005];
 5 set<pair<int,int> > ha;
 6 int main()
 7 {
 8     int m,n,x;
 9     char str[5];
10     while(cin>>m>>n)
11     {
12         for(int i=1;i<=m;i++)
13         {
14             cin>>a[i];
15             ha.insert(make_pair(a[i],i));
16         }
17         while(n--)
18         {
19             cin>>str>>x;
20             if(str[0]==‘i‘)
21             {
22                 set<pair<int,int> >::iterator it=ha.begin();
23                 set<pair<int,int> >::iterator ti=ha.end();
24                 it=ha.lower_bound(make_pair(x,0));
25                 if(it==ti)
26                 cout<<"-1"<<endl;
27                 else
28                 {
29                     cout<<it->second<<endl;
30                     ha.erase(it);
31                 }
32             }
33             else
34                 ha.insert(make_pair(a[x],x));
35         }
36     }
37     return 0;
38 }

原文地址:https://www.cnblogs.com/wwq-19990526/p/9280035.html

时间: 2024-09-30 04:35:53

Gym - 100989D 题学习stl中的set<pair<int ,int > >的相关文章

C++学习STL之关联容器 --- pair、map、set

本博文我们继续讨论标准模板库STL的关联容器: 主要有:pair.map.set. 一:pair pair是一种简单的关联类型,不属于容器范围.而是代表一个 key-value键值对. 创建.初始化.操作 示例代码如下: 1 #include <iostream> 2 #include <string> 3 #include <vector> 4 using namespace std; 5 //将pair放入容器&initpair 6 int main(int

[转载] 彻底学习STL中的Allocator

原文: http://cissco.iteye.com/blog/379093 帮助我们理解allocator的原理 Allocator是C++语言标准库中最神秘的部分之一.它们很少被显式使用,标准也没有明确出它们应该在什么时候被使用.今天的allocator与最初的STL建议非常不同,在此过程中还存在着另外两个设计--这两个都依赖于语言的一些特性,而直到最近才在很少的几个编译器上可用.对allocator的功能,标准似乎在一些方面追加了承诺,而在另外一些方面撤销了承诺. 这篇专栏文章将讨论你能

STL中关于map和set的四个问题?

STL map和set的使用虽不复杂,但也有一些不易理解的地方,如: # 为何map和set的插入删除效率比用其他序列容器高? # 为何每次insert之后,以前保存的iterator不会失效? # 为何map和set不能像vector一样有个reserve函数来预分配数据? # 当数据元素增多时(10000到20000个比较),map和set的插入和搜索速度变化如何? 或许有得人能回答出来大概原因,但要彻底明白,还需要了解STL的底层数据结构. C++ STL 之所以得到广泛的赞誉,也被很多人

STL 中make_heap学习

STL中make_heap 的接口为: default (1) template <class RandomAccessIterator> void make_heap (RandomAccessIterator first, RandomAccessIterator last); custom (2) template <class RandomAccessIterator, class Compare> void make_heap (RandomAccessIterator

stl中char 与wchar 的转换

学习记录: stl中 字符串 str自然对应的是string 宽字符串wchar 对应的是wstring 宽字符串占用两个字节 两者的转换有三种办法 1 windows 的api转换函数WideCharToMultiByte()与MultiByteToWideChar(). 不适合跨平台使用. 2 ATL中CA2W类与CW2A类.或者使用A2W宏与W2A宏.稍显累赘和麻烦 3 使用CRT库的函数 函数和使用方法见下列代码 #include <string> #include <iostr

STL中的vector 和list

参考书目:visual c++ 入门经典 第七版 Ivor Horton著 第十章 认识两个容器:vector和list 容器:是STL(Standard Template Library 标准模板库)的六大组件之一.(容器,容器适配器,迭代器,算法,函数对象,函数适配器) 容器是用来存储和组织其他对象的对象.提供要存储的对象的类型就可以从STL模板中创建容器类. Vector <T>:表示一个在必要时刻可增加容量的数组,该数组存储T类型的元素.只能在矢量容器的末尾添加新元素. Vector

STL中erase的小心使用

先看如下一道改错题: #include<iostream> #include<vector> using namespace std; void print(vector<int>); int main() { vector<int> array; array.push_back(1); array.push_back(6); array.push_back(6); array.push_back(3); //删除array数组中所有的6 vector<

STL中vector的初始化

vector可用于代替C++中的数组,一般一致认为应该多用vector,因为它的效率更高,而且具备很好的异常安全性.而且vector是STL推荐使用的默认容器,STL中向量是使用数组实现的,因此向量具有顺序表的特点,可以快速随机存取数据.向量是一种数据类型的对象的集合,每个对象根据其位置有一个整数索引值与其对应,类似于数组. 使用向量之前,必须包含相应的头文件: #include<vector> using std::vector 同时也应当注意,vector是一个模板类,而非数据类型.所以在

C++ STL中哈希表 hash_map介绍

过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能.例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改: 岳不群-华山派掌门人,人称君子剑张三丰-武当掌门人,太极拳创始人东方不败-第一高手,葵花宝典... 这些信息如果保存下来并不复杂,但是找起来比较麻烦.例如我要找"张三丰"的信息,最傻的方法就是取得所有的记录,然后按照名字一个一个比较.如果要速度快,就需要把这些记录按照字母顺序排列,然后按照二分法查找.但是增加记录的时候同时需要保持记