2020-6-2 map?

 

问题描述

试题编号: 202006-2
试题名称: 稀疏向量
时间限制: 2.0s
内存限制: 512.0MB
问题描述:

 
 
#include<stdio.h>//数据量很大,所以采用C输入输出
#include<map>//map头文件
using namespace std;//map命名空间
map<int,int> m;

int main()
{
    int n,a,b;
    int index,value;
    scanf("%d%d%d",&n,&a,&b);
    for(int i=1;i<=a;i++)
    {
        scanf("%d%d",&index,&value);
        m[index] = value;
    }
    long long sum=0;
    for(int i=1;i<=b;i++)
    {
        scanf("%d%d",&index,&value);
        sum+= value * m[index];
    }
    printf("%lld\n",sum);//数据太大,有两个warning
    return 0;
}

  

map用于存储稀疏数据是最有效的,也可以用来存储稀疏向量。2个向量不必都存储,能够边读入数据边计算可以节省存储,也有助于提高计算速度。
先读入数据存储在数据结构中,再进行处理是倒腾,既浪费存储又浪费时间,完全没有必要。
STL中的map
 
map简介
map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。
对于迭代器来说,可以修改实值,而不能修改key。
 
map的功能
自动建立Key - value的对应。key 和 value可以是任意你需要的类型。
根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。
快速插入Key -Value 记录。
快速删除记录。
根据Key 修改value记录。
遍历所有记录。
 
map的基本操作函数:
     C++ maps是一种关联式容器,包含“关键字/值”对
     begin()         返回指向map头部的迭代器
     clear()        删除所有元素
     count()         返回指定元素出现的次数
     empty()         如果map为空则返回true
     end()           返回指向map末尾的迭代器
     equal_range()   返回特殊条目的迭代器对
     erase()         删除一个元素
     find()          查找一个元素
     get_allocator() 返回map的配置器
     insert()        插入元素
     key_comp()      返回比较元素key的函数
     lower_bound()   返回键值>=给定元素的第一个位置
     max_size()      返回可以容纳的最大元素个数
     rbegin()        返回一个指向map尾部的逆向迭代器
     rend()          返回一个指向map头部的逆向迭代器
     size()          返回map中元素的个数
     swap()           交换两个map
     upper_bound()    返回键值>给定元素的第一个位置
     value_comp()     返回比较元素value的函数
posted @ 2021-02-28 18:52  永恒&  阅读(39)  评论(0编辑  收藏  举报