什么是STL
STL(Standard Template Library),意为标准模板库,是c++提供的一系列"容器",这里只说其中的vector,priority_queue,map,pair,set五种(实际为四种,因为pair在map的结构里),其中,除了 s e t set set外都有下标访问和迭代器访问两种方法
Vectoe
又名变长数组,长度没有固定约束,随着需要的值而变化,在要用到多个数组或结构体时可 以用到.
需要用到头文件#include< vector>及 using namespace std;
基础定义为vector< typename> name;其中,typename可以是任何基本类型,如int、double、char、结构体等,也可以是容器
A.上网统计
题目描述
在一个网络系统中有N个用户1≤N≤1000、M次上网记录1≤M≤5000。每个用户可以自己注册一个用户名,每个用户名是一个只含小写字母的字符串。每个上网的账号每次上网都会浏览网页,网页名是一串只含小写字母的字符串,每次上网日志都会留下记录,现在请你统计一次上网日志中,每个用户浏览了多少个网页。(输出按照输入顺序输出)
输入格式
第一行N和M 第2行到第M+1行为M条上网日志,每行两个字符串,用空格隔开
输出格式
N个ID的上网记录,具体看样例
样例
样例输入
5 7
guomao wangyi
lifan tengxun
zhoushijian souhu
zhangshilin tengxun
guomao souhu
zhoushijian wangyi
liuyang bilibili
样例输出
guomao wangyi souhu
lifan tengxun
zhoushijian souhu wangyi
zhangshilin tengxun
liuyang bilibili
这道题可以用vector里面套vector,把每个ID的浏览记录也设为vector,用来储存所有浏览网页和长度
#include<cstdio>
#include<vector>
#include<string>
#include<iostream>
using namespace std;
struct ren{
string ID;
vector<string> WEB;
};
vector<ren> v;
int n,m;
int main()
{
string id,web;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
cin>>id>>web;
bool flag=0;
for(int j=0;j<v.size();j++)
{
if(id==v[j].ID)//如果已有这个用户
{
v[j].WEB.push_back(web);//在WEB里push网页名称
flag=1;//已查找过
break;
}
}
if(flag!=1)//新用户
{
ren now;
now.ID=id;
now.WEB.clear();
now.WEB.push_back(web);
v.push_back(now);
}
}
for(vector<ren>::iterator it=v.begin();it!=v.end();it++)//迭代器访问
{
cout<<(*it).ID;
for(vector<string>::iterator it1=(*it).WEB.begin();it1!=(*it).WEB.end();it1++)
{
cout<<" "<<*it1;//因为迭代器里储存的是地址,在前面加上*号才能取值
}
cout<<endl;
}
return 0;
}
priority_queue
优先队列,其本质是堆
需要用到头文件#include< queue>及 using namespace std;
基础定义为queue< typename> name;其中,typename可以是任何基本类型,如int、double、char、结构体等,也可以是容器
注意:和queue不一样的是,priority_queue没有front()和back(),而只能通过top()或pop()访问队首元素(也称为堆顶元素),也就是优先级最高的元素
初始定义为大根堆
priority_queue< int,vector< int>,less< int> >q;
若是小根堆
priority_queue< int,vector< int>,greater< int> >q;
注意:外层>要和里层分开,否则编译器会误认为是>>右移符号!
B. 有序表的最小和
题目描述
给出两个长度为 n 的有序表 A 和 B,在 A 和 B 中各任取一个元素,可以得到 n*n 个和,求这些和中最小的 n 个。
输入格式
第 1 行包含 1 个整数正 n(n≤400000)。 第