文件管理器
Description
文件管理器
操作系统具有对计算机硬件资源管理和调度的功能。文件是对占用了硬盘一定空间的对象的描述和抽象。考虑一般的文件
具有文件名、大小和创建时间。文件管理在任何操作系统中都是必不可少的。文件管理器是用户用来观察和操作文件的一
个软件。考虑一个简易的文件管理器,用户可以通过这个简易的文件管理器对某个目录下文件最大/小、文件名(字符串)字
典序最大/最小的一些文件,即按XX排序功能,此外文件管理器具有删除和添加文件的功能。输入保证目录只有一级,操
作随机。
Input
第1行输入一个Q(1<=Q<=100000),表示操作的次数。
第2-Q+1行输入一行操作序列
操作序列的格式为 op args
当op=1,即第一种操作时,args的格式为 folder name size 表示将要在某个folder目录(1<=folder<=5的整数)下添加文件名为name(1<=name<=100000的整数)的文件,文件大小为size(1<=size<=100000的整数),如果文件名重复,就先删除原来的文件再进行1操作;
当op=2,即第二种操作时,args的格式为 folder name表示将要在某个folder目录(1<=folder<=5的整数)下删除文件名为name(1<=name<=100000的整数)的文件,如果文件名不存在,操作不执行;
当op=3,即第三种操作时,args的格式为 folder k 表示输出某个目录下文件大小最大至第k大的文件名,如果大小相同按文件名数字从小到大输出,如果不满k个文件只需要输出已有的文件名,如果文件夹为空或不存在则输出一个空行;
当op=4,即第四种操作时,args的格式为 folder k 表示输出某个目录下文件名数字大小最小至第k小的文件名,如果不满k个文件只需要输出已有的文件名,如果文件夹为空或不存在则输出一个空行;
保证1<= k <=10
Sample Input 1
10
2 3 74071
3 1 2
3 2 8
2 3 71337
3 3 7
3 2 7
4 2 10
4 3 6
4 3 4
3 1 4
Sample Output 1
8行空行
Sample Input 2
10
1 2 10 1
1 2 20 2
1 2 30 3
1 2 40 3
1 2 50 3
3 1 5
4 1 9
3 2 3
4 2 3
4 2 10
Sample Output 2
10
1 2 10 1
1 2 20 2
1 2 30 3
1 2 40 3
1 2 50 3
3 1 5
4 1 9
3 2 3
30 40 50
4 2 3
10 20 30
4 2 10
10 20 30 40 50
思路
#include<iostream>
using namespace std;
#include<unordered_map>
#include<vector>
#include<algorithm>
const int N = 6;
typedef struct LNode* List;
struct LNode {
int name;
int size;
LNode(int a, int b) :name(a), size(b) {}
};
bool my_cmp_greater(LNode a, LNode b)
{
if (a.size == b.size) return a.name < b.name;
return a.size > b.size;
}
bool my_cmp_less(LNode a, LNode b)
{
if (a.size == b.size) return a.name > b.name;
return a.size < b.size;
}
bool my_find(LNode a, LNode b)
{
return a.name == b.name;
}
int main() {
vector<LNode>v[N];
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
int op;
cin >> op;
int folder = 0, name = 0, size = 0;
int k = 0;
switch (op)
{
case 1:
{
cin >> folder >> name >> size;
LNode tmp = LNode(name, size);
bool flag = true;
for (int i = 0; i < v[folder].size(); i++)
{
if (v[folder][i].name == name)
{
v[folder][i] = tmp;
flag = false;
}
}
if (flag)
{
v[folder].push_back(tmp);
}
/*vector<LNode>::iterator it = find_if(v->begin(), v->end(), [](LNode n1, LNode n2) {return n1.name == n2.name; });*/
break;
}
case 2:
{
cin >> folder >> name;
for (int i = 0; i < v[folder].size(); i++)
{
if (v[folder][i].name == name)
{
v[folder][i] = v[folder].back();
v[folder].pop_back();
}
}
break;
}
case 3:
{
cin >> folder >> k;
sort(v[folder].begin(), v[folder].end(), my_cmp_greater);//从大到小
if (v[folder].size() == 0)
{
cout << endl;
break;
}
if (v[folder].size() < k)
{
for (int i = 0; i < v[folder].size(); i++)
{
if (i == v[folder].size() - 1)
{
cout << v[folder][i].name << endl;
}
else
{
cout << v[folder][i].name << ' ';
}
}
}
else
{
for (int i = 0; i < k; i++)
{
if (i == k - 1)
{
cout << v[folder][i].name << endl;
}
else
{
cout << v[folder][i].name << ' ';
}
}
}
break;
}
case 4:
{
int folder, k;
cin >> folder >> k;
sort(v[folder].begin(), v[folder].end(), my_cmp_less);//从大到小
if (v[folder].size() == 0)
{
cout << endl;
break;
}
if (v[folder].size() < k)
{
for (int i = 0; i < v[folder].size(); i++)
{
if (i == v[folder].size() - 1)
{
cout << v[folder][i].name << endl;
}
else
{
cout << v[folder][i].name << ' ';
}
}
}
else
{
for (int i = 0; i < k; i++)
{
if (i == k - 1)
{
cout << v[folder][i].name << endl;
}
else
{
cout << v[folder][i].name << ' ';
}
}
}
break;
}
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!