#1519. multimap模板题
multimap模板题
题目描述
现有一个多重映射(Multimap)容器,支持以下操作:插入键值对、删除键值对、查询键对应的值、统计键的出现次数和遍历指定键的所有值。你需要实现这个多重映射,并处理可能的边界情况。具体规则如下:
- 插入操作:向多重映射中插入一个键值对。允许存在相同键的不同值。
- 删除操作:删除指定键的所有键值对。若键不存在,则操作无效。
- 查询操作:检查是否存在指定键的键值对。
- 统计操作:返回指定键的键值对数量。若键不存在,则操作无效。
- 遍历操作:输出指定键的所有值(按插入顺序)。若键不存在,则操作无效。
操作完成后,需输出最终多重映射的所有键值对(按键升序、值升序排列)。
输入格式
- 第一行输入一个整数
q(1 ≤ q ≤ 1000000),表示操作的总次数。 - 接下来
q行,每行表示一次操作,格式如下:- 插入操作:
1 key value(插入键为key,值为value的键值对)。 - 删除操作:
2 key(删除键为key的所有键值对)。 - 查询操作:
3 key(查询是否存在键为key的键值对)。 - 统计操作:
4 key(统计键为key的键值对数量)。 - 遍历操作:
5 key(输出键为key的所有值,按插入顺序)。
- 插入操作:
输出格式
- 对于每次查询操作(操作3),输出一行:
- 若存在,输出
YES; - 若不存在,输出
NO。
- 若存在,输出
- 对于每次统计操作(操作4),输出一行整数,表示键为
key的键值对数量。 - 对于每次遍历操作(操作5),输出一行:
- 若键存在,输出其所有值,按插入顺序,用空格分隔;
- 若键不存在,输出空行。
- 所有操作完成后,输出多行:
- 每行包含两个整数
key value,表示键值对,按键升序排列,若键相同则按值升序排列。 - 若多重映射为空,不输出任何行。
- 每行包含两个整数
样例 1 输入
6
1 1 10
1 1 20
1 2 30
3 1
4 1
5 1
样例 1 输出
YES
2
10 20
1 10
1 20
2 30
样例说明
- 插入操作:依次插入
(1, 10)、(1, 20)、(2, 30),多重映射变为{1: [10, 20], 2: [30]}。 - 查询操作:查询键1,存在,输出
YES。 - 统计操作:统计键1的键值对数量,为2,输出2。
- 遍历操作:遍历键1的所有值,按插入顺序输出
10 20。 - 最终输出:按键升序、值升序排列输出所有键值对。
测试点约束
- 操作次数
q ≤ 1000000。 - 键和值的取值范围为
int(-2^31 ~ 2^31-1)。 - 保证所有数据全合法
提示
- 允许重复:多重映射中允许存在相同键的不同值。
- 有序性:输出键值对时需按键升序、值升序排列。
- 高效实现:插入、删除和查询操作的时间复杂度应为O(log n)。