alfabetisk vector-sortering med std::string

Tags:    c++

Hvordan kan man sortere en std::vector<EnKlasse> baseret på en std::string i EnKlasse, således at sorteringen bliver korrekt alfabetisk, "Abe, abe, Bjørn, bjørn", og ikke "Abe, Bjørn, abe, bjørn"?

Fx som i nedenstående eksempel?
Fold kodeboks ind/udKode 






Hvis du altid vil bruge den samme sortering af din class, er det letteste at lave en global < operator for din class, evt som en friend, f.ex:

Fold kodeboks ind/udKode 


Så sorterer du bare med:
std::sort(vec.begin(), vec.end());



Ja det lyder nemt nok :D, men hvad med den alfabetiske del?
En string sorteres jo efter bogstavets ASCII værdi, eller noget i den stil, så store bogstaver altid kommer før små, og altså ikke i den rækkefølge man ville forvente i en ordbog.



Indlæg senest redigeret d. 10.08.2006 09:47 af Bruger #8874
Du kan bruge:
Fold kodeboks ind/udKode 


Hvis du mener at det er bedre.



Ja, nu står de opstillet alfabetisk, men prioriteten af store bogstaver er ikke højere end for små. Findes der ikke en sammenlignings-funktion, som kan opstille store bogstaver FØR små, og samtidig danne en alfabetisk orden?
Eller er man nød til selv at skrive en?:|



Jeg forstår ikke. Hvad er problemet?

Den første tog hensyn til store og små bogstaver, og det var et problem, den anden gør ikke, og det er også et problem



Beklager hvis jeg ikke har udtrykt meg klart nok.
Det jeg mente var at der FØRST blev taget hensyn til alfabetisk rækkefølge, og DEREFTER til store/små bogstaver.

Fold kodeboks ind/udKode 

I ovenstående rækkefølge blicer output:
Abe
Bjørn
abe
bjørn
Fold kodeboks ind/udKode 

Ovenstående giver output:
Abe
abe
bjørn
Bjørn

Det ønskede output er dog:
Abe
abe
Bjørn
bjørn

Altså alfabetisk rækkefølge, hvor store bogstaver kommer før små.
Håber det er til at forstå ellers så bare spørg :D



Jeg tror at du er nød til at lave din egen algoritme til sammenligning. Der er vist ikke nogen af standard algoritmerne der virker på den måde som du vil have dem til.



t