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的函数
本文来自博客园,作者:永恒&,转载请注明原文链接:https://www.cnblogs.com/Sun-yuan/p/14455993.html