map模板题
You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.
题目描述
现有一个映射(Map)容器,支持以下操作:插入键值对、删除键值对、查询键对应的值、修改键对应的值和统计映射大小。你需要实现这个映射,并处理可能的边界情况。具体规则如下:
- 插入操作:向映射中插入一个键值对。若键已存在,则修改对应的值。
- 删除操作:从映射中删除指定键的键值对。若键不存在,则操作无效。
- 查询操作:获取指定键对应的值。若键不存在,则返回特殊值。
- 修改操作:修改指定键对应的值。若键不存在,则操作无效。
- 统计操作:返回映射中键值对的数量。
操作完成后,需输出最终映射的所有键值对(按键升序排列)。
输入格式
- 第一行输入一个整数
q
(1 ≤ 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, 10)
和(2, 20)
,映射变为{1: 10, 2: 20}
。 - 查询操作:查询键2,值为20,输出20。
- 修改操作:将键1的值修改为30,映射变为
{1: 30, 2: 20}
。 - 查询操作:查询键1,值为30,输出30。
- 最终输出:映射中有两个键值对,按键升序排列输出。
测试点约束
- 操作次数
q ≤ 1000000
。 - 键和值的取值范围为
int
(-2^31 ~ 2^31-1)。
提示
- 唯一性:映射中每个键唯一对应一个值。
- 有序性:输出键值对时需按键升序排列。
- 高效实现:插入、删除和查询操作的时间复杂度应为O(log n)。
7.25造数据
- Status
- Done
- Rule
- IOI
- Problem
- 13
- Start at
- 2025-7-25 18:00
- End at
- 2025-7-25 21:00
- Duration
- 3 hour(s)
- Host
- Partic.
- 9