coudn实现了从文件中按字母顺序在字符串c ++中排序的函数

时间:2015-01-03 01:23:01

标签: c++ stl

我尝试在我的项目中实现一个从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;
}

我尝试的代码太乱了,如果我放在这里就不明白。 如果有人可以帮我按字母顺序排序,我会非常感谢你。

1 个答案:

答案 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());

另一种方法可能是为班级学生重载<运算符,但我建议这样做,因为如果您有任何旁边的排序,现在可以将<用于其他目的。

阅读:http://www.cplusplus.com/reference/algorithm/sort/