在C ++中按优先级升序对带有int和string的txt文件进行排序
Posted
技术标签:
【中文标题】在C ++中按优先级升序对带有int和string的txt文件进行排序【英文标题】:Sort a txt file with int and string in ascending order of priority in C++ 【发布时间】:2022-01-18 03:03:35 【问题描述】:我想要做的是我想创建一个函数在 C++ 中对 txt 文件进行排序。数据很容易给出:(第一列)int优先级(第二列)字符串任务 即
orignal txt file
4 make coffee
3 make charts
6 prepare notes
2 do homework
6 go for walk
0 prepare prenentation
2 prepare essay
1 lorem ipsum
what i want it to be
0 prepare prenentation
1 lorem ipsum
2 do homework
2 prepare essay
3 make charts
4 make coffee
6 prepare notes
6 go for walk
我尝试了多种方法,但都没有奏效。我希望它按优先级升序排序(0 是最低优先级)。如果两个或多个任务具有相同的优先级,则应按发生顺序对其进行排序。 每个任务在此文件中占一行。文件中的每一行都应采用以下格式:
任务
其中 p 是优先级(priority 将是一个数字),task 是任务描述。
优先级表示一个任务的重要性,如果是高优先级的任务,就应该早点完成。优先级用整数表示,数字越小优先级越高。
这是一个包含 2 个项目的示例文件。
1 Buy milk
2 Complete the project
【问题讨论】:
请编辑问题并将您的代码添加为尝试解决问题的文本。在 StackOveflow,如果你不展示你的尝试/努力,你很少会得到很多帮助。 像 “我已经尝试过几种方法,但没有一种方法有效” 之类的陈述,然后不显示您尝试过的内容或描述无效的内容基本上相当于请求有人根据模糊的规范解释和实施整个问题。我会提醒你这是你的任务,而不是我们的。 【参考方案1】:void sort_file()
vector <string> task_t;
fstream newfile;
newfile.open("task.txt",ios::in);
if (newfile.is_open())
string tp;
while(getline(newfile, tp))
task_t.push_back(tp);
newfile.close();
std::sort(std::begin(task_t), std::end(task_t), [](std::string const& a, std::string const& b)
return std::lexicographical_compare(std::begin(a), std::begin(a) + 1, std::begin(b), std::begin(b) + 1);
);
std::ofstream outFile("task.txt");
for (const auto &e : task_t)
outFile << e << "\n";
outFile.close();
【讨论】:
以上是关于在C ++中按优先级升序对带有int和string的txt文件进行排序的主要内容,如果未能解决你的问题,请参考以下文章