文件管理器

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;
		}

		}
	}
}
posted @   某朝  阅读(89)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示