Ich habe eine Klasse sort_map
:C++ Sortierklasse Vektor
class sort_map {
char key;
int val;
sort_map(int v, char k): key(k), val(v){}
};
using namespace std;
int comp_int(const void *a, const void *b) {
return (*(sort_map*)b).val - (*(sort_map*)a).val);
}
int main() {
vector <sort_map> v;
v.push_back(5, 'a');
v.push_back(67, 'd');
v.push_back(2, 'c');
v.push_back(98, 'f');
return 1;
}
Ich möchte den Vektor von val bestellen qsort
verwenden, und es funktioniert nicht.
qsort(&v.begin(), v.size(), sizeof(sort_map), comp_int);
Aber wenn ich diese verwenden, funktioniert es
qsort(&v[0], v.size(), sizeof(sort_map), comp_int);
Kann mir jemand sagen, warum?
Verwenden Sie stattdessen ['std :: sort'] (http://en.cppreference.com/w/cpp/algorithm/sort) – NathanOliver
Warum? '& v.begin()' ruft die Adresse des Iterators ab, nicht die Daten, auf die der Iterator verweist. 'qsort' sucht am falschen Ort. – user4581301
* Ich möchte den Vektor von val mit qsort * bestellen - Nein, vergiss es. Verwende 'std :: sort'. Und wenn dies eine "Voraussetzung für Ihre Aufgabe ist,' qsort' zu verwenden, [siehe hier] (http://ideone.com/g8tiPK). Der Rückgabewert von 0 aus 'std :: is_pod 'zeigt, dass Sie' sort_map' nicht mit qsort sortieren können, ohne undefiniertes Verhalten aufzurufen. – PaulMcKenzie