队列,Vector 容器(类),Map映射

news/2024/11/9 9:53:29/

1、快递分拣

蓝桥王国的每个快递都包含两个参数:1.快递单号 2.快递城市。

小李是蓝桥王国的一名快递员,每天的快递分拣让他苦不堪言。

于是他想要你帮他设计一个程序用于快递的分拣(将不同快递按城市信息分开)。

输入第一行包含一个整数 �N,表示快递的个数。

接下来第 N+1 行每行包含一个字符串 �S 和一个字符串 �P,分别快递单号以及快递对应的城市。

1≤�≤1031≤N≤103,保证数据量不超过 106106。

输出描述

输出共若干行。按城市的输入顺序依次输出城市的名称以及城市的快递个数,以及该城市的所有快递单号(单号按照输入顺序排序)。

输入输出样例

10 
10124214 北京
12421565  上海
sdafasdg213 天津
fasdfga124 北京
145252  上海
235wtdfsg 济南
3242356fgdfsg 成都
23423 武汉  
23423565f 沈阳
1245dfwfs 成都

输出:
 

北京 2
10124214
fasdfga124
上海 2
12421565
145252
天津 1
sdafasdg213
济南 1
235wtdfsg
成都 2
3242356fgdfsg 
1245dfwfs 
武汉 1
23423
沈阳 1
23423565f 

代码: 

#include<iostream>
#include<vector>
using namespace std;vector<string> city;
vector<string> dig[1000];int Myfind(string s)
{for(int i=0;i<city.size();i++){if(city[i]==s) return i;}return -1;
}
int main()
{int n;cin>>n;for(int i=0;i<n;i++){string d,c;cin>>d>>c;int flag=Myfind(c);if(flag==-1){city.push_back(c);dig[city.size()-1].push_back(d);}else  dig[flag].push_back(d);}for(int i=0;i<city.size();i++){cout<<city[i]<<" "<<dig[i].size()<<endl;for(int j=0;j<dig[i].size();j++)cout<<dig[i][j]<<endl;}
}

2、 CLZ银行问题

题目不难

#include <bits/stdc++.h>
using namespace std;
queue<string>n;
queue<string>v;
int main()
{int m;cin >> m;while (m--){string op, name, type;cin >> op;if (op == "IN"){cin >> name >> type;if (type == "V"){v.push(name);}else{n.push(name);}}else{cin >> type;if (type == "V")v.pop();elsen.pop();}}while (v.size()){cout << v.front() << '\n';v.pop();}while (n.size()){cout << n.front() << '\n';n.pop();}return 0;
}

1、队列:

queue<string> myqueue;
queue<int> myqueue_int;
  • front():返回 queue 中第一个元素的引用。
  • back():返回 queue中最后一个元素的引用。
  • push(const T& obj):在 queue 的尾部添加一个元素的副本。
  • pop():删除 queue 中的第一个元素。
  • size():返回 queue 中元素的个数。
  • empty():如果 queue 中没有元素的话,返回 true。

2、Vector 容器(类)

线性表中有 Vector 顺序表 和 list 链表,两者作用比较相似。

Vector 的主要作用就是可变长度的数组,就把他当成数组使用即可。

#include <vector>   //头文件
vector<int> a;      //定义了一个int类型的vector容器a
vector<int> b[100]; //定义了一个int类型的vector容器b组
struct rec
{···
};
vector<rec> c;            //定义了一个rec类型的vector容器c
vector<int>::iterator it; //vector的迭代器,与指针类似
a.size()           //返回实际长度(元素个数),O(1)复杂度
a.empty()      //容器为空返回1,否则返回0,O(1)复杂度
a.clear()      //把vector清空
a.begin()      //返回指向第一个元素的迭代器,*a.begin()与a[0]作用相同
a.end()        //越界访问,指向vector尾部,指向第n个元素再往后的边界
a.front()      //返回第一个元素的值,等价于*a.begin和a[0]
a.back()       //返回最后一个元素的值,等价于*--a.end()和a[size()-1]
a.push_back(x) //把元素x插入vector尾部
a.pop_back()   //删除vector中最后一个元素

遍历方式两种:
 

 for ( vector<int>::iterator it=a.begin() ; it!=a.end() ; it++ )cout<<*iterator<<endl;for ( auto it=a.begin() ; it!=a.end() ; it++ )cout<<*iterator<<endl;

当成数组使用:
 

for( int i=0;i<a.size();i++) cout<<a[i]<<endl;

3、Map映射:

map 是一个关联容器,它提供一对一的 hash

  • 第一个可以称为关键字(key),每个关键字只能在 map 中出现一次
  • 第二个可能称为该关键字的值(value)

map 以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。Map 主要用于资料一对一映射(one-to-one)的情況,map 在 C++ 的內部的实现自建一颗红黑树,这颗树具有对数据自动排序的功能。在 map 内部所有的数据都是有序的。比如,像是管理班级内的学生,Key 值为学号,Value 放其他信息的结构体或者类。

1)定义方式:

map<char, int> mymap1;map<string, int> mymap2;

2)一般用法:

看容量:

int map.size();//查询map中有多少对元素
bool empty();// 查询map是否为空

 插入:

    map.insert(make_pair(key,value));//或者map.insert(pair<char, int>(key, value))//或者map[key]=value

取值:

map<int, string> map;//如果map中没有关键字2233,使用[]取值会导致插入
//因此,下面语句不会报错,但会使得输出结果结果为空
cout<<map[2233]<<endl;//但是使用使用at会进行关键字检查,因此下面语句会报错
map.at(2016) = "Bob";

遍历:

map<string, string>::iterator it;
for (it = mapSet.begin(); it != mapSet.end(); ++it)
{cout << "key" << it->first << endl;cout << "value" << it->second << endl;
}

查找:

m.count(key)://由于map不包含重复的key,因此m.count(key)取值为0,或者1,表示是否包含。
m.find(key)://返回迭代器,判断是否存在。

3、费里的语言:

题目描述

小发明家弗里想创造一种新的语言,众所周知,发明一门语言是非常困难的,首先你就要克服一个困难就是,有大量的单词需要处理,现在弗里求助你帮他写一款程序,判断是否出现重复的两个单词。

输入描述

第 11 行,输入 �N,代表共计创造了多少个单词。

第 22 行至第 �+1N+1 行,输入 �N 个单词。

1≤�≤1041≤N≤104,保证字符串的总输入量不超过 106106。

输出描述

输出仅一行。若有重复的单词,就输出重复单词,没有重复单词,就输出 NO,多个重复单词输出最先出现的。

输入输出样例

输入:

5
sdfggfds
fgsdhsdf
dsfhsdhr
sdfhdfh
sdfggfds

输出:

sdfggfds

代码:

#include <iostream>
#include <map>
using namespace std;
map<string, bool> mp;
int main()
{int n;string ans = "NO";cin >> n;for (int i = 0; i < n; i++){string word;cin >> word;if (mp.count(word)) {ans = word;break;}else mp[word] = 1;}cout << ans << endl;return 0;
}


http://www.ppmy.cn/news/1394597.html

相关文章

stm32使用定时器实现PWM与呼吸灯

PWM介绍 STM32F103C8T6 PWM 资源&#xff1a; 高级定时器&#xff08; TIM1 &#xff09;&#xff1a; 7 路 通用定时器&#xff08; TIM2~TIM4 &#xff09;&#xff1a;各 4 路 例如定时器2 PWM 输出模式&#xff1a; PWM 模式 1 &#xff1a;在 向上计数 时&#xff0…

集成学习 | 集成学习思想:Boosting

目录 一. Boosting思想1. Adaboost 算法1.1 Adaboost算法构建流程1.2 sklearn库参数说明 2. Gradient Boosting 算法2.1 Gradient Boosting算法构建流程2.2 Gradient Boosting算法的回归与分类问题2.2.1 Gradient Boosting回归算法均方差损失函数绝对误差损失函数 2.2.2 Gradie…

Java 沉淀-2

一维数组 初始化&#xff1a; 动态初始化&#xff1a;数组声明且为数组元素分配空间与赋值操作分开进行 静态初始化&#xff1a;在定义数组的同时就为数组元素分配空间并赋值 数组元素类型 二维数组 数组中的数组 初始化 注意特殊学法情况&#xff1a;int[]x,y[]: x是一维数…

Linux 设备树: 了解设备树 dtb 文件的构成

自己不倒&#xff0c;别人推不倒。自己不想站起来&#xff0c;别人扶也扶不起来。 前言 当前新版本的 Linux 内核 设备驱动框架&#xff0c;与设备树&#xff08;Device Tree&#xff09;结合密切&#xff0c;整体 设备树的设备驱动框架&#xff0c;比较的庞大&#xff0c;但又…

使用阿里CICD流水线打包Java项目到阿里的docker镜像私仓,并自动部署到服务器启动服务

文章目录 使用阿里CICD流水线打包Java项目到阿里的docker镜像私仓&#xff0c;并自动部署到服务器启动服务1、功能原理实现2、将自己的Java项目通过Git上传到阿里的代码仓库中&#xff0c;也可以通过绑定Gitee或者GitHub账号进行导入3、创建自己的阿里云镜像私仓3、进入阿里的C…

11 获取表中全部数据并打印

while(resultSet.next())循环获取每条记录 每个循环中循环获取每列 通过getMetaData获取列信息&#xff0c; resultSet.getXXX(第几列) XXX为java类型&#xff0c;对应数据库类型&#xff0c;列信息中可以获取到 所以判断第几行第几列的列数据库类型&#xff0c;转成java类型 从…

全新的分布式锁,功能简单且强大

分布式锁是分布式系统中一个极为重要的工具。 目前有多种分布式锁的设计方案&#xff0c;比如借助 redis&#xff0c;mq&#xff0c;数据库&#xff0c;zookeeper 等第三方服务系统来设计分布式锁。 tldb 提供的分布式锁&#xff0c;主要是要简化这个设计的过程&#xff0c;提…

动态规划16 | ● 583. 两个字符串的删除操作 ● *72. 编辑距离

583. 两个字符串的删除操作 https://programmercarl.com/0583.%E4%B8%A4%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E5%88%A0%E9%99%A4%E6%93%8D%E4%BD%9C.html 考点 子序列问题 我的思路 dp[i][j]的含义是&#xff0c;当两个字符串分别取前i和j个元素时&#xff0c;对应…