zoukankan      html  css  js  c++  java
  • 【模板】map入门

    map

    在数据特别庞大,数组已经满足不了的某些情况下codevs p1230,可以用上map;

    我们可以将map容器作为一个有序的映射表,看作为一个下表可以是任意类型的数组;

    map是一个红黑树,单次操作的时间o(lgn);

    使用

    • 定义map

    map<类型1,类型2>变量名

    map<string,int>ma                //定义ma

    ma["abc"]=2                         //将"abc"映射在2上

    cout<<ma["abc"]<<endl;       //输出2

    • 操作
    operator[] 访问map中的元素,若该元素不存在,将创建一个新元素,并将该元素映射到类型2的初始值上
    ma.begin() 返回map中第一个元素的迭代器(指针)
    ma.end() 返回map中最后一个元素的迭代器(指针)
    ma.size() 返回map中元素个数
    ma.cout(element) 若map中存在element,返回1,否则返回0
    ma.clear() 初始化map
    ma.lower_bound() 返回大于等于给定元素的第一个位置


    模板题

    题目描述

    给出n个正整数,然后有m个询问,每个询问一个整数,询问该整数是否在n个正整数中出现过。

    输入输出

    input

    第一行两个整数 n 和m。

    第二行n个正整数(1<=n<= 100000)

    第三行m个整数(1<=m<=100000)

    output

    一共m行,若出现则输出YES,否则输出NO

    样例

    输入
    4 2
    
    2 1 3 4
    
    1 9

    输出

    YES
    NO

    数据范围

    不超过10^8

    代码

    #include<cstdio>
    #include<map>
    using namespace std;
    map<int,int> ma;
    int n,m;
    int main() {
    	scanf("%d%d",&n,&m);
    	for(int i=1; i<=n; i++) {
    		int w;    //读入与编号
    		scanf("%d",&w);
    		ma[w]=i;
    	}
    	for(int i=1; i<=m; i++) {
    		int w;
    		scanf("%d",&w);
    		if(ma.count(w)) printf("%s
    ","YES");
    		else printf("%s
    ","NO");//寻找当中是否有这个数
    	}
    }
    

      

  • 相关阅读:
    内存分配小问题
    从MACHINE_START开始
    Linux驱动学习(二)
    9,斐波那契数列 6,旋转数组找最小 8青蛙跳台阶 JAVA实现
    数组练习题
    类的练习
    for循环练习题
    封装练习题
    Facebook成为Apache基金会的白金赞助商
    Visual Studio 2010
  • 原文地址:https://www.cnblogs.com/bbqub/p/7674104.html
Copyright © 2011-2022 走看看