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
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
8行空行
思路
#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++)
{
cout << v[folder][i].name << ' ' << v[folder][i].size << endl;
}
}
else
{
for (int i = 0; i < k; i++)
{
cout << v[folder][i].name << ' ' << v[folder][i].size << endl;
}
}
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++)
{
cout << v[folder][i].name << ' ' << v[folder][i].size << endl;
}
}
else
{
for (int i = 0; i < k; i++)
{
cout << v[folder][i].name << ' ' << v[folder][i].size << endl;
}
}
break;
}
}
}
}
标签:文件,管理器,name,LNode,int,folder,size
From: https://www.cnblogs.com/szz123/p/18503149