zoukankan      html  css  js  c++  java
  • STL好之映射

    Dev.C++STL好之映射map:map可以作为一个工具使用,也可以作为一个主考点。

    今天我们来讲一个特殊的容器:map。他的基本形式是

    map<typename,typename>name
    

    他的意思是将第一个类型映射到第二个类型中。这句话可能有点迷,下面我们来举个栗子。

    ————CSP比赛成绩出来了!你记得你的考号吗?
    ————记得,是123456(信口瞎编)
    ————下面发布一下成绩(重点)
    ......
    123454 125分
    123455 215分
    123456 0分
    ......
    

    这里可以理解为下面一段代码

    ...
    int a[600600];
    ...
    a[123454]=125;
    a[123455]=215;
    a[123456]=0;
    ...
    //事实上可以拿循环打
    

    这是最正常的数组对吧,以有迹可循的考号作为下标。然鹅......(剧情重演)

    ————CSP比赛成绩出来了!你记得你的考号吗?
    ————呜呜呜不记得了!!!
    

    (全剧终)

    (接上)
    ————名字记得吗?
    ————肯定记得呀!
    ————我们刚刚看了riced的博客,启用了map......(你们当做没看到就好了)
    

    什么意思?假设这个人叫riced,那么有以下程序

    int a[name];
    ...
    a[riced]=0;
    ...
    

    读入名字,以名字为下标,这就是我们传说中的映射map!
    对于map,我不做过多解释,这里引用一段oi-wiki的话

    你可能需要存储一些键值对,例如存储学生姓名对应的分数: Tom 0 , Bob 100 , Alan 100 。但是由于数组下标只能为非负整数,所以无法用姓名作为下标来存储,这个时候最简单的办法就是使用 STL 中的 map 了!
    map 重载了 operator[] ,可以用任意定义了 operator < 的类型作为下标(在 map 中叫做 key ,也就是索引):
    
    map<Key, T> yourMap;
    
    其中, Key 是键的类型, T 是值的类型,下面是使用 map 的实例:
    
    map<string, int> mp;
    
    

    map应用

    map有两种应用,这里举两个例子。

    map<string,int>mp1;
    map<int,int>mp2;
    

    对于第一种,就是单纯的映射运用。而第二种(就是Key为int的时候),可以理解为数组下标离散化防止爆空间和CE。好了,你学会了吗?

    禁止下滑
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    禁止下滑
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    事不过三
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    为什么今天打一个map呢?今天我遇到了一道题。
    

    题目描述

    数组是一个以下标来储存一些信息的一种数据结构,方便起见,本题中,我们认为,数组是一个以整数为下标来储存整数的数据结构。

    现在 Cuber QQ 需要进行一些简单的数组读写操作。

    简而言之, Cuber QQ 的任务有两种:

    在下标为 XX 的位置存入数字 YY
    输出下标为 XX 的位置存放的数字,若 XX 处没有数字,则输出 00
    你能帮 Cuber QQ 解决这个问题吗?

    数据范围

    对于所有数据,保证 1 ≤ OPT ≤ 2 , X ≤ M,Y ≤ (10^9) .

    众所周知,int a[1e9]铁定会爆,于是我打了一发我自己也不知道是什么的东西

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,cnt=0;
    struct line
    {
    	long long to,a,ln;
    }l[100100];
    void add(int num,int line)
    {
    	l[++cnt].a=num;
    	l[cnt-1].to=cnt;
    	l[cnt].ln = line;
    }
    int main()
    {
    	scanf("%d%d",&n,&m);
    	while(n--)
    	{
    		int opt,x,y;
    		scanf("%d%d",&opt,&x);
    		if(opt==2)
    		{
    			bool flag=false;
    			for(int i=1;i<=cnt;i++)
    			{
    				if(l[i].ln == x)
    				{
    					flag=true;
    					printf("%lld
    ",l[i].a);
    					break;
    				}
    			}
    			if(flag==false)printf("0
    ");
    		}
    		else 
    		{
    			scanf("%d",&y);
    			bool flag=false;
    			for(int i=1;i<=cnt;i++)
    			{
    				if(y==l[i].ln)
    				{
    					flag=true;
    					l[i].a = x;
    					break;
    				}
    			}
    			if(flag==false)add(y,x);
    		}
    	}
    }
    

    然鹅,讲完题之后,我知道了一个主考点(以前讲过):map。于是我就懂了map到底是什么,换句话说我就更深层次的了解了map。

  • 相关阅读:
    重要的环境变量
    常用的转义字符
    常用系统工作命令
    栈 队列 和 双向队列
    时间
    默认值字典
    Counter
    random
    22 内置常用模块01
    super
  • 原文地址:https://www.cnblogs.com/riced/p/14340051.html
Copyright © 2011-2022 走看看