Hey,
ich habe einen vector<string> mit CD-Namen, diesen sortiere ich alphabetisch und wenn eine Nummer am Ende ist, wird das auch numerisch sortiert. Dauert mir aber ein wenig lange, schon auf Windows, es soll später auf einem Raspi laufen, da wirds noch länger dauern, schon allein weil von Micro-SD gelesen wird.
Beispiel Ergebnis der Sortierung
ACD_1
aCD_2
ACD_2
ACD_12
BCD_1
BCD_12
bCD_2
usw. ....
So sortiere ich das:
Ohne Sortierung dauert der Vorgang(Daten aus dem Dateisystem hohlen) < 1 Sekunde, mit sortierung mehr als 10, die Sortierung ist also der Flaschenhals. Kann man die Sortierung irgendwie schneller hinkriegen?
ich habe einen vector<string> mit CD-Namen, diesen sortiere ich alphabetisch und wenn eine Nummer am Ende ist, wird das auch numerisch sortiert. Dauert mir aber ein wenig lange, schon auf Windows, es soll später auf einem Raspi laufen, da wirds noch länger dauern, schon allein weil von Micro-SD gelesen wird.
Beispiel Ergebnis der Sortierung
ACD_1
aCD_2
ACD_2
ACD_12
BCD_1
BCD_12
bCD_2
usw. ....
So sortiere ich das:
C-Quellcode
- bool IsCharLess(char c1, char c2)
- {
- return tolower(static_cast<unsigned char>(c1)) < tolower(static_cast<unsigned char>(c2));
- }
- bool Comparer(const string& s1, const string& s2)
- {
- smatch m1, m2;
- regex r("\\d+$");
- if (regex_search(s1, m1, r) && regex_search(s2, m2, r))
- {
- string a(m1.prefix());
- string b(m2.prefix());
- if (a.compare(b) == 0)
- {
- return stoi(m1.str()) < stoi(m2.str());
- }
- }
- return lexicographical_compare(s1.begin(), s1.end(), s2.begin(), s2.end(), IsCharLess);
- }
Ohne Sortierung dauert der Vorgang(Daten aus dem Dateisystem hohlen) < 1 Sekunde, mit sortierung mehr als 10, die Sortierung ist also der Flaschenhals. Kann man die Sortierung irgendwie schneller hinkriegen?
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Takafusa“ ()