» »

[C++] Sortiranje strukture

[C++] Sortiranje strukture

minghags ::

Kako bi lahko strukturo sortiral po imenu in priimku?

Koda:

#include <iostream>
#include <string>
using namespace std;
struct student
{
    int st_studenta;
    string vpisna;
    string ime;
    string priimek;
};
student vpis(int st_studenta)
{
    student student;
    string vpisna,ime,priimek;
    cout<<endl<<"Vnesite vpisno številko študenta: ";
    cin>>vpisna;
    cout<<endl<<"Vnesite ime študenta: ";
    cin>>ime;
    cout<<"Vnesite priimek študenta: ";
    cin>>priimek;
    student.st_studenta=st_studenta+1;
    student.vpisna=vpisna;
    student.ime=ime;
    student.priimek=priimek;
    return student;
}
void izpis(student student)
{
    cout<<endl<<"St. študenta: "<<student.st_studenta;
    cout<<endl<<"Vpisna: "<<student.vpisna<<endl;
    cout<<endl<<"Ime: "<<student.ime<<endl;
    cout<<endl<<"Priimek: "<<student.priimek<<endl;
}

int main()
{
    int st_studentov=0;
    student seznam_student[50];
    int meni;
    do
    {
        cout<<"-------MENU-------------"<<endl;
        cout<<"________________________"<<endl;
        cout<<"1. Vnos študenta        "<<endl;
        cout<<"2. Izpis študentov      "<<endl;
        cout<<"3. Sortiranje študentov "<<endl;
        cout<<"4. Najdi študenta       "<<endl;
        cout<<"0. Izhod                "<<endl;
        cout<<"========================"<<endl;
        cin>>meni;
        
        if(meni==1)
        {
            seznam_student[st_studentov]=vpis(st_studentov);
            st_studentov++;
        }
        if(meni==2)
        {
            for(int a=0;a<st_studentov;a++)
            {
                izpis(seznam_student[a]);
            }
        }
    }while(meni!=0);
    return 0;
}


Če mi lahko kdo prosim razloži ali pa me napoti v pravo smer...

Hvala

kow ::

To se počne s knjižnico STL. Napolniš vector stringov in kličeš algoritem sort. Da je sort imun na velike začetnice, pa je malo bolj komplicirano.
Searchaj "STL vector string sort alphabetically". Pa dodaj še besedo stackoverflow.

win64 ::

ni toliko komplicirano, funkcij sort lahko pošlješ sortirno funkcijo kot parameter.
Funkcijo za primerjat pa ni toliko komplicirano napisat.
int compare(const student & a, const student & b)
{
 return (a.priimek.append(" ").append(a.ime)).compare(b.priimek.append(" ").append(b.ime));
}


Če želiš, da ne upošteva velikosti črk, potem pač oba niza prej spremeniš v male ali velike črke.

http://www.cplusplus.com/reference/algo...
http://www.cplusplus.com/reference/stri...

zos ::

Glede na to, da je tole verjetno za kak 1. letnik faksa, bi sklepal, da moras sortiranje implementirati "rocno" s kaksnim od algoritmov, ki ste jih spoznali.

MrBrdo ::

IntroSort ftw
MrBrdo

smoke ::

Če uporabiš STL container
vector<student>
recimo z imenom "studenti" potem lahko načeloma sortiraš tudi tako:

std::sort(studenti.begin(), studenti.end(), [&] (stud s1, stud s2) {
	std::string a = s1.ime + s1.priimek;
	std::string b = s2.ime + s2.priimek;
	return lexicographical_compare(a.begin(), a.end(), b.begin(), b.end());
});


Razen če je point naloge da sam napišeš sortirni algoritem, kot je že zgoraj nekdo omenil. Potrebuješ pa compiler, ki podpira C++11 standard za tole rešitev.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C++] Naloga seznam

Oddelek: Programiranje
223277 (2552) Matic1911
»

[c#] Napačen izpis -- prazni stringi

Oddelek: Programiranje
51523 (1465) Spura
»

[Java][Naloga] Seznam študentov, majčken problem

Oddelek: Programiranje
362308 (1995) VASkO
»

Osnove objektnega programiranja

Oddelek: Programiranje
61037 (924) Krushi
»

c++ datoteke

Oddelek: Programiranje
464036 (3525) Vesoljc

Več podobnih tem