STL模板

本文介绍了C++的STL(标准模板库),重点关注vector、priority_queue、map、pair和set的使用。通过实例展示了如何利用这些容器解决编程问题,如上网统计、有序表最小和的计算、查字典等,强调了在不同场景下选择合适容器的重要性,并提醒在使用迭代器时的注意事项。
摘要由CSDN通过智能技术生成

什么是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)。 第

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值