Skip to content

1412: 文件存储结构测试(for bookstore)

题目

题目描述

本题是 Bookstore 大作业的文件存储部分的检查。

需要基于文件存储实现一个 Key-value database(键值数据库),即在文件上实现类似 std::map 的功能。

实现方式不限,可以是 块状链表 or whatever you want。但禁止将非当前指令所需数据存储于内存中。

本题输入指令有以下三种情况:

  • insert [index] [value]
  • [index] 为索引,插入值为 [value] 的条目

  • delete [index] [value]

  • 删除以 [index] 为索引,值为 [value] 的条目。请注意,删除的条目可能不存在

  • find [index]

  • 找出所有索引为 [index] 的条目,并以 [value] 升序顺序输出,每个 [value] 间用一个空格隔开。若索引值为 [index] 的条目不存在,则输出 [null]。在整个指令输出结束后输出 \n

其中,[index] 为长度不超过 64 个字节的字符串(无空白字符),[value]int 范围内的整数。

数据中,[index][value] 均可能重复,但同一个 [index] 对应的 [value] 不可重复。

如果使用 Git 提交代码,请参考 Bookstore 评测方式说明👈这是个 link。本题除样例外无公开数据点

此外,对于在 Bookstore 中使用文件存储的建议:

  • 可以将整个存储单元、文件读写模块封装成一个类。
  • 如果要用该类对不同的对象进行存储,可以写成模板类。

输入格式

第一行为整数n,表示总命令数。

接下来n行为n条指令,指令为上文提到的三种指令之一。

输出格式

在执行find index指令后,找出所有索引为index的条目,并以value升序的顺序输出,每个value间用一个空格隔开。若索引值为index的条目不存在,则输出null。在整个指令输出结束后回车换行

样例输入

8 insert FlowersForAlgernon 1966 insert CppPrimer 2012 insert Dune 2021 insert CppPrimer 2001 find CppPrimer find Java delete Dune 2021 find Dune

样例输出

2001 2012 null null

数据范围

$1\le n \le 100000$

存储的总条目数不超过$100000$

保证输入数据合法

注意,测试中有需要在上一运行结果的基础上继续操作的测试点,而文件的清除操作将由评测机完成,因此你只需要检查文件是否存在,若不存在则创建一个文件

Oops! 本题目还没有解答!

助教老师们编题的速度,已经超过了解题的速度!

OJ翻了一新,但本解答集还大多用的是2017-2019级,甚至更早的同学们贡献的答案。

如果你已经AC了,可以的话,请您参考添加页面,与大家一起分享你的题解!