C++ összehasonlítás vagy rendezés <locale> alapján

Fórumok

Tudna valaki egy példát írni, hogyan lehet C++ <locale> alapján összehasonlítani vagy sorba rendezni (stringeket)?Egyik próbálkozásom (forrás: locale_classes.h):

Template operator to compare two strings using the compare function
of the collate facet in this locale. One use is to provide the
locale to the sort function. For example, a vector v of strings
could be sorted according to locale loc by doing:

std::sort(v.begin(), v.end(), loc);


#include <locale>
#include <vector>

using namespace std;

int main ()
{
    locale loc();
    vector<string> pb;
    pb.push_back("csík");
    pb.push_back("ások");
    pb.push_back("ésik");
    sort(pb.begin(), pb.end(), loc);
    return 0;
}

több oldal hibát ír ki.

szaszi

Hozzászólások

listázd ki a locale-okat,

$ locale -a
C
POSIX
en_GB
en_GB.iso88591
en_GB.utf8
en_US
en_US.iso88591
en_US.utf8
hu_HU
hu_HU.iso88592
hu_HU.utf8
hungarian

és utána így:


#include <locale>
#include <vector>

using namespace std;

int main ()
{
    locale loc("hu_HU");
    vector<string> pb;
    pb.push_back("csík");
    pb.push_back("ások");
    pb.push_back("ésik");
    sort(pb.begin(), pb.end(), loc);
    return 0;
}

Na ez nekem is jól jött volna 2-3 héttel ezelőtt, mikor Fejlett Prog-ból magyar neveket rendezett sorrendben tároló telefonkönyv osztályt kellett készíteni..

Bár próbálkoztam locale-val, nálam mindig hibát dobott, akármit próbáltam a locale-val csinálni.

Csak nem te is? :)
--
A gyors gondolat többet ér, mint a gyors mozdulat.

< offtopic >

Nekem tavaly volt, de az fpt1 nem egy nagy téma, inkább már most kezdj el tanulni algára, mert az iszonyúan sok... Egyébként tavaly fpt zh-n volt egy elég gyík template-es feladat, meg egy metaprogramozásos (olyan tömb létrehozása, minek elemszáma fibonacci-szám kell legyen).

< /offtopic >

< off >
Jaja, vagom, hogy alga huzos, de igy is tanultam egesz felevben, mivel eloadason katalogus van, minden gyakon van kiszh + a 2 nagyzh + a 2 kotprogi :)

FPT-re meg minden irott/nyomtatott segedanyag viheto.

Szobatars mar szerzett tavalyrol progikat, tegnap irtam meg nalattk-t meg lnko-t metaval, kinyomtat, bevisz; faktorialis, fibonacci, max, megvan tavalyiaktol, primtesztelot megcsinaltuk oran, de rossz meghajton van, igy itthonrol nem erem el.. :).

< /off >
---
A gyors gondolat többet ér, mint a gyors mozdulat.

Nekem is szétszáll (FreeBSD 6.2-kb)


$ g++ --version:
g++ (GCC) 3.4.6 [FreeBSD] 20060305

$ locale -a |fgrep hu_HU
hu_HU.ISO8859-2
hu_HU.UTF-8
$ cat loc.cxx
#include <locale>
#include <vector>

using namespace std;

int main ()
{
    locale loc("hu_HU.ISO8859-2");
    vector<string> pb;
    pb.push_back("csík");
    pb.push_back("ások");
    pb.push_back("ésik");
    sort(pb.begin(), pb.end(), loc);
    return 0;
}
$ ./loc
terminate called after throwing an instance of 'std::runtime_error'
  what():  locale::facet::_S_create_c_locale name not valid
Abort trap (core dumped)
$