grosse Datenmengen - wie in der App halten?
-
Vielleicht hätte ich doch erwähnen sollen, daß du diese Vergleichsfunktionen nicht als (normale) Methoden der View definieren solltest - sort() arbeitet mit binären Funktoren und Funktionszeigern, aber nicht mit Methodenzeigern zusammen.
(also entweder du nimmst eine globale Funktion oder eine statische Methode)
-
Dank, Dank und nochmals Dank, euch allen.
So 'einfach' kann es sein

grüssle

-
So, kommt doch noch ne Frage. Und zwar hab ich das jetzt folgendermassen eingebaut:
Im Header:public: static bool compare_segNmbrAsc(const LCSTRUCT& l,const LCSTRUCT& r ) { return l.vNmbr < r.vNmbr; } static bool compare_segNmbrDesc(const LCSTRUCT& l,const LCSTRUCT& r ) { return l.vNmbr > r.vNmbr; } ...und in der cpp
if ( pNMListView->iSubItem == 0 ) { bDirection1 = (bDirection1) ? false : true; if( bDirection1 ) std::sort( lstVect.begin(), lstVect.end(), compare_segNmbrAsc ); else std::sort( lstVect.begin(), lstVect.end(), compare_segNmbrDesc ); } ...Ist sogar etwas schneller als meine Sortierung

Allerdings sortiert er nach ASCII, also erst Grossbuchstaben, dann die kleinen, dann Umlaute, ...
Habe dann meine eigene Funktion gebastelt, die erst ein MakeLower() macht, und dann die Umlaute bereinigt. Für Deutsch. Es ist aber ein Tool für Übersetzungen. Und da ich keine Lust habe, eine Funktion für jede mögliche Sprache zu erstellen, wollte ich das ganze mit setlocale machen. Aber er macht nichts.
Habe den Header eingebunden und vor den sort setlocale( LC_ALL, "german" ); gesetzt. Ohne Erfolg.
Lt. MSDN sollte es funktionieren?! Tuts aber nicht.
Ist hier noch etwas zu berücksichtigen? Google und die Forumssuche haben mich nicht wirklich weitergebracht.Ok, von der Zeit her wäre meine eigene Lösung noch ok. 100.000 Einträge dauern ohne meine Funktion ca 30 Sek., mit ca 60 Sek.
Aber warum jetzt nicht den ganzen Weg gehen?
grüssle

-
wenn es ein tool ist fuer uebersetzungen (arbeite in der localisierung, uebersetzungen sind mein spezial gebiet)
dann wuerde ich raten das tool direkt Unicode zu erstellen, dann ist das CString auch nicht unicode und vergleicht richtig.
Dann hast du auch keine probleme beim anzeigen der aisatischen sprachen
CHS, CHT, KOR, JPN, THA usw
-
Ist UNICODE. Sortiert trotzdem 'falsch'.
Auch die Files, die bearbeitet werden sind UNICODE( entweder UTF8 oder UTF16 ). Soweit ist alles ok.
Auch das Anzeigen der Daten im ListCtrl ist kein Thema, Chinesisch, Koreanisch, Polnisch, ...
Alles funktioniert.Nur der std::sort ...
grüssle

-
also ich sortiere meine ergebnisse {suche in der datenbank nach uebersetzungen} auch indem ich den strukturen vector das std::sort verpass, und habe ueberhaupt keine probleme dieser art
btw: CString::MakeUpper() sollte mit allen sprachen funktionieren denk ich
-
Bei mir MakeLower(). Ist aber egal. Hauptsache gleichgross

Nur beim Sortieren stellt er sich an wie ein :xmas2:
Deshalb die Frage wegen setlocale.
char* p = setlocale( LC_ALL, "german" );p = "German_Germany.1252".
Aber an dem Sortierchaos ändert das rein garnix
grüssle

-
nur so nebenbei, wenn deine app unicode ist, warum bentzt du ueberall char ?
char ist ANSI, fuer unicode nimmt man wchar_t
ich habs immer so das ich alles in TCHAR schreibe - also auch _T("text") statt "text" oder L"text"
wenn du schon unicode benutzt, sei wenigstens konsequent und benutz es auch durchweg, spaarst dir viel aerger damit
-
Is klar. der char* p oben ist nur zum Testen. Wird eigentlich nicht gebraucht.
CString und _T("bla") rulez ;), oder TCHAR, oder ...
grüssle
