VirtualList und vectors?
-
Hallo,
hab problem beim sortieren von vectoren, vielleicht hat jemand eine idee wie ich das zu lösen habe!
Problem: ich habe ein CListCtrl mit der option LVS_OWNERDATA und alle daten werden in einem vector gehalten, nun wenn ich sortiere bricht das programm ab, das anzeigen geht gut?
Hier hab ich gelesen das beim sortieren auch die funktion erase aufgerufen werden muss? Wo muss ich die aufrufen, in der sortierfunktion selber oder wo?danke
vector
-
Zeig uns doch mal den Code wie Du sortierst.
-
Hallo,
möchte noch dazusagen das die Sortierfunktion keine Fehler ausgibt wenn ich nur 10
Das Project ist ein Beispielproject vom codeproject über virtuelle listen!
Einträge erstelle, nur wenn es mehr sind, und so rufe ich die auf:sort(m_database.begin(), m_database.end(), compare_v); // compare_v ist dann meine Funktion // und so sortiere ich(verkürzt dargestellt): int compare_v(const CSampleData& d1, const CSampleData& d2) { if(b_ascending) return lstrcmp(d1.m_name, d2.m_name); else return lstrcmp(d2.m_name, d1.m_name); } // hier ein zwiter versuch: int compare_v(const CSampleData& d1, const CSampleData& d2) { //return lstrcmp(d1.m_name, d2.m_name); // hier hab ich das if(b_ascending) weggelassen... if(0 > lstrcmp(d1.m_name, d2.m_name)) return -1; else if(0 < lstrcmp(d1.m_name, d2.m_name)) // wenn ich diese und die nächste zeile dekomentiere, dann gehts??? return 1; else return 0; }Irgendwas mach ich mächtig falsch! Was?
Dan beim debuggen kann ich sehen das einer von den Strings leer ist, abhängig davon ob ich absteigend oder aufsteigend sortiere! und nur dann brichts ab!?
Danke
vector
-
sort erwartet keine DReifach-Auswahl, sondern nur die Entscheidung "ist kleiner" vs. "ist größer-gleich". Von daher ist dein Sortierkrierium einfach falsch (+1 und -1 werden als true angesehen, 0 als false). Richtiger sieht es so aus:
int compare_v(const CSampleData& d1, const CSampleData& d2) { return lstrcmp(d1.m_name, d2.m_name)>0;//bzw. <0 }
-
Hallo,
besten dank für die antwort!
Jetzt gehts!
vector!