Chcę utworzyć funkcję zwyczaj porównywania dla std :: sort(), aby uporządkować kilka par klucz-wartość std :: pairC++ funkcja zwyczaj porównać do std :: sort()
Oto moja funkcja
template <typename K, typename V>
int comparePairs(const void* left, const void* right){
if((((pair<K,V>*)left)->first) <= (((pair<K,V>*)right)->first))
return 1;
else
return -1;
}
Następnie wewnątrz jakiejś klasie mam wektor członka klasy pary:
vector<pair<K,V>> items;
a niektóre metody sortowania przez ten wektor klawiszy, za pomocą std :: sort()
std::sort(items.begin(), items.end(), comparePairs<K,V>);
Mam błędów kompilacji wewnątrz, co powiedział
"nie można przekonwertować numer parametru z 'std :: pair < _Ty1, _Ty2>' do 'const void *'"
. Co to za błąd?
Dlaczego jesteś biorąc swoje parametry jako 'void *' s? dlaczego nie jako "std :: pair"? –
Błąd polega na tym, że mylisz komparator z 'std :: sort' z jednym dla' qsort', który wymaga argumentów 'const void *'. Napisz poprawny komparator dla 'std :: sort', który akceptuje odniesienia do' pair ', a problem zniknie. –
user4815162342
Dlaczego ktoś miałby to robić, gdy pokazuje całkowity brak badań, czytania, zwracania uwagi, myślenia lub czegokolwiek innego? –