有时需要根据索引找到对应的元素,像键值对一样的查找,并对这些元素进行操作。可以同故宫调用STL里面的map来解决这个问题。

map关联集合的本质也是一棵红黑树,可以看做一个下标可以是任意类型的数组。

头文件是map:#include<map>

常用方法

1)map<A,B> ds  建立一个名为ds、下标类型为A,元素类型为B的映射表,例如

map<string,int> 就是一个将string映射到int的映射表

2)ds[A] = B  把这个“数组”中下标为A的位置的值变成B,这里下标可以是任意类型,不一定限定为大于0的整数

3)ds[A]  访问这个“数组”中下标为A的元素,可以直接输出如cout<<ds["ykx666"]<<endl;

4)ds.end()  返回映射表中最后一个元素的下一个元素的地址,通常配合其他方法来确认某个元素是否存在

5)ds.find(x) 查询x在映射表中的地址,如果不存在,则返回ds.end()

6)ds.empty() 如果映射表为空,则返回1,否则返回0

7)ds.size() 返回映射表中的元素个数

8)ds.erase(A) 删除这个”数组”中下标为A的元素

注意:在使用ds[A]访问“数组”下标为A的元素时,如果对应元素不存在,则会自动创建下标为A、值为默认值(例如,所有数值类型的默认值是0,string字符串是空字符串)的元素。

光说光看 知识是不够全面的,来结合题目看看。

题目选自洛谷P5266

题目描述

您要设计一个学籍管理系统,最开始学籍数据是空的,然后该系统能够支持下面的操作(不超过 10^5条):

  • 插入与修改,格式1 NAME SCORE:在系统中插入姓名为 NAME(由字母和数字组成不超过 20 个字符的字符串,区分大小写) ,分数为{SCORE}SCORE(0<SCORE<231) 的学生。如果已经有同名的学生则更新这名学生的成绩为 SCORE。如果成功插入或者修改则输出OK
  • 查询,格式2 NAME:在系统中查询姓名为 NAME 的学生的成绩。如果没能找到这名学生则输出Not found,否则输出该生成绩。
  • 删除,格式3 NAME:在系统中删除姓名为 NAME 的学生信息。如果没能找到这名学生则输出Not found,否则输出Deleted successfully
  • 汇总,格式4:输出系统中学生数量。

输入格式

输出格式

输入输出样例

输入 1

5
1 lxl 10
2 lxl
3 lxl
2 lxl
4

输出 1

OK
10
Deleted successfully
Not found
0

解题代码:

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<map>
using namespace std;
int n,opt,score; string name;
map<string,int> ds;
int main(){cin>>n;while(n--){cin>>opt;if(opt == 1){cin>>name>>score;ds[name] = score;cout<<"OK"<<endl;}else if(opt == 2){cin>>name;if(ds.find(name) != ds.end())cout<<ds[name]<<endl;else cout<<"Not found"<<endl;}else if(opt == 3){cin>>name;if(ds.find(name) != ds.end()){ds.erase(ds.find(name));cout<<"Deleted successfully"<<endl;}else{cout<<"Not found"<<endl;}}else{cout<<ds.size()<<endl;}}return 0;
}

C++ STL map集合的使用相关推荐

  1. [C++] map集合的使用

    [C++集合]STL中的map STL中的map以一种效率较高的形式(红黑树)实现了映射.(C++11又提供了一种更为先进的unordered_map,基于哈希表,拥有 O(1) 的时间复杂度,两种容 ...

  2. C++ map容器和multimap容器(STL map容器)

    目录 1. 关联容器和map容器概述 2. map容器 2.1 map的创建以及初始化列表 2.2 map容器的一般常用属性(方法) 2.3 插入数据 2.4 数据的访问和遍历 2.5 数据的删除 2 ...

  3. C++ 笔记(24)— STL map 类(map实例化、插入、查找、删除)

    1. STL 映射类简介 map 和 multimap 是键-值对容器,支持根据键进行查找,区别在于,后者能够存储重复的键,而前者只能存储唯一的键. 为了实现快速查找, STL map 和 multi ...

  4. STL map 简介

    STL map 简介 转载于:http://www.cnblogs.com/TianFang/archive/2006/12/30/607859.html 1.目录 map简介 map的功能 使用ma ...

  5. Java中的Map集合遍历总结(详尽版)

    因为Map集合中的键值对排列无序,所以不能用传统的for循环来遍历,只能使用加强循环(for-each)和迭代器进行遍历. 让我们通过例子来了解Map集合的遍历: package gather; im ...

  6. 安卓取map集合转换为json_android json解析成map格式

    "discount": { "3": "34", "4": "33", "5": ...

  7. Map集合中value()方法与keySet()、entrySet()区别 ——转载

    为什么80%的码农都做不了架构师?>>>    在Map集合中 values():方法是获取集合中的所有的值----没有键,没有对应关系, KeySet(): 将Map中所有的键存入 ...

  8. java map 队列_Java:queue队列,map集合

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构 Queue接口与List.Set同一级别,都是继承了Collection接口.Lin ...

  9. 8.Map集合(HashMapTreeMap)

    一.Map集合概述和使用 1.Map集合概述 Interface Map<K,V> K:键的类型 V:值的类型 将键映射到值的对象:不能包含重复的键:每个键可以映射到最多一个值 创建Map ...

最新文章

  1. 第二章 序列比对——Blast局部比对
  2. python 网络设备管理软件_一个查看网络设备信息Python小程序
  3. Python-100 练习题 02
  4. 一款动态跑路html源码,简单实用,上传解压就完事了
  5. 《Python游戏趣味编程》 第7章 飞机大战
  6. 因为造轮子,我一个月就转正了 | 原力计划
  7. 【气动学】基于matlab导弹拦截计算方法【含Matlab源码 982期】
  8. linux一键ghost,linux 下一键 Ghost
  9. 概率论数理统计笔记01(对应教材——《概率论与数理统计》(同济大学出版社出版))
  10. matlab2021a下载安装
  11. Spring+SpringMVC+MongoDB案例
  12. 重新实现reuseport逻辑,实现一致性哈希
  13. Kalman滤波在温度测量中的应用(含MATLAB仿真)
  14. 【学习笔记】炼数成金 Dataguru python2.x 2012
  15. C++小游戏笔记——射击小行星(附源码)
  16. linux课后作业答案第六章,操作系统 第六章作业习题解答
  17. IDC机房运维经验浅谈
  18. 佳能Canon imagePRESS C7010VP 打印机驱动
  19. 广州中大成考培训火热招生中
  20. Win7 无法用win+R打开dos命令窗口的问题

热门文章

  1. menuStrip之MdiWindowListItem判断子窗口是否被打开的方法
  2. Cisco正式停止MARS产品的销售
  3. Cisco交换机链路聚合
  4. Vue中data为何以函数形式返回
  5. linux设置蓝牙可连接网络,Linux下蓝牙参数设置程序
  6. petalinux板卡没有ip address_海思板卡端访问服务器的文件(一)
  7. Servlet相关(servletconfig、servletcontext、request)
  8. 超图Cesium卷帘遇到的坑
  9. bash中的grep函数_如何在Bash中编写函数
  10. qt界面嵌入web_使用Qt WebAssembly而不是JavaScript创建Web用户界面