我尝试在我的项目中实现一个从txt文件读取的函数,并按字母顺序显示它们。我想按字母顺序排序numeStudent
并在显示时显示整行numeStudent prenumeStudent等。
这是我阅读和显示的功能,我想在显示之前添加排序:
void Student::ListareStudenti()
{
ifstream fisier;
fisier.open ("studenti.txt");
cout <<setw(14)<< "NUME"<<setw(14)<<"PRENUME"<<setw(10)<<"FACULTATE"<<setw(10)<<"SPECIALIZ"<<setw(10)<<"MATERIE"<<setw(10)<<"LABORATOR"<<setw(10)<<"EXAMEN"<<setw(10)<<"MEDIA"<<endl<<endl;
while(!fisier.eof())
{
fisier>>numeStudent>>prenumeStudent>>facultate>>specializare>>materie>>notaLaborator>>notaExamen>>media;
cout<<setw(14)<<numeStudent<<setw(14)<<prenumeStudent<<setw(10)<<facultate<<setw(10)<<specializare<<setw(10)<<materie<<setw(10)<<notaLaborator<<setw(10)<<notaExamen<<setw(10)<<media<<endl;
}
fisier.close();
}
这也是我的整个项目:Dropbox Download 。我试图在我的项目中实现这个功能(下面),但我没有成功。
#include <iostream>
#include <set>
#include <algorithm>
void print(const std::string& item)
{
std::cout << item << std::endl;
}
void sort()
{
std::set<std::string> sortedItems;
for(int i = 1; i <= 5; ++i)
{
std::string name;
std::cout << i << ". ";
std::cin >> name;
sortedItems.insert(name);
}
std::for_each(sortedItems.begin(), sortedItems.end(), &print);
}
int main(void)
{
sort();
return 0;
}
我尝试的代码太乱了,如果我放在这里就不明白。 如果有人可以帮我按字母顺序排序,我会非常感谢你。
答案 0 :(得分:0)
我们假设您要对Student
的容器进行排序。
vector<Student> vec;
// input and store the required values from the file
std::sort(vec.begin(),vec.end(),comp);
您将comp定义为
bool comp(Student &a,Student &b)
{
return a.numeStudent < b.numeStudent ; // assuming they are public members
}
现在你可以做到
std::for_each(vec.begin(), vec.end(), &print);
其中print
函数打印您要打印的所有详细信息。
但是,如果您只想对string
的容器进行排序,则可以简单地
std::sort(vec_strings.begin(),vec_strings.end());
另一种方法可能是为班级学生重载<
运算符,但我建议这样做,因为如果您有任何旁边的排序,现在可以将<
用于其他目的。