#1518. map模板题

map模板题

题目描述

现有一个映射(Map)容器,支持以下操作:插入键值对、删除键值对、查询键对应的值、修改键对应的值和统计映射大小。你需要实现这个映射,并处理可能的边界情况。具体规则如下:

  1. 插入操作:向映射中插入一个键值对。若键已存在,则修改对应的值。
  2. 删除操作:从映射中删除指定键的键值对。若键不存在,则操作无效。
  3. 查询操作:获取指定键对应的值。若键不存在,则返回特殊值。
  4. 修改操作:修改指定键对应的值。若键不存在,则操作无效。
  5. 统计操作:返回映射中键值对的数量。

操作完成后,需输出最终映射的所有键值对(按键升序排列)。

输入格式

  • 第一行输入一个整数q1 ≤ q ≤ 1000000),表示操作的总次数。
  • 接下来q行,每行表示一次操作,格式如下:
    • 插入操作1 key value(插入键为key,值为value的键值对)。
    • 删除操作2 key(删除键为key的键值对)。
    • 查询操作3 key(查询键为key对应的值)。
    • 修改操作4 key new_value(将键为key的值修改为new_value)。
    • 统计操作5(返回映射中键值对的数量)。

输出格式

  • 对于每次查询操作(操作3),输出一行:
    • 若键存在,输出对应的值;
    • 若键不存在,输出-1
  • 对于每次统计操作(操作5),输出一行整数,表示映射中键值对的数量。
  • 所有操作完成后,输出多行:
    • 每行包含两个整数key value,表示键值对,按键升序排列。
    • 若映射为空,不输出任何行。

样例 1 输入

5
1 1 10
1 2 20
3 2
4 1 30
3 1

样例 1 输出

20
30
2
1 30
2 20

样例说明

  1. 插入操作:插入键值对(1, 10)(2, 20),映射变为{1: 10, 2: 20}
  2. 查询操作:查询键2,值为20,输出20。
  3. 修改操作:将键1的值修改为30,映射变为{1: 30, 2: 20}
  4. 查询操作:查询键1,值为30,输出30。
  5. 最终输出:映射中有两个键值对,按键升序排列输出。

测试点约束

  • 操作次数 q ≤ 1000000
  • 键和值的取值范围为int(-2^31 ~ 2^31-1)。

提示

  • 唯一性:映射中每个键唯一对应一个值。
  • 有序性:输出键值对时需按键升序排列。
  • 高效实现:插入、删除和查询操作的时间复杂度应为O(log n)。