Ich möchte eine Strukturliste, eine Paar-Struktur eines Iterators und Doppelwert;Sortierung einer Liste mit Strukturpaar mit Std :: Sort
Das obige ist mein Versuch. Meine Struktur ist
template<class Iterator>
struct Pair{
double distance;
Iterator iterator; };
Meine Sortierfunktion ist;
template<class SetIterator>
static bool MyDataSortPredicate(const Pair<SetIterator>& lhs, const Pair<SetIterator>& rhs){
return lhs.distance < rhs.distance;
}
Liste der Strukturwerte erstellen; es ist distance_pair, beachte seinen Typ.
template<class SetIterator>
std::vector<Pair<SetIterator> > createSortedPointDistancePairs(
SetIterator begin, SetIterator end,Vector const& query){
std::vector<double> it(std::distance(begin,end));
std::vector<double>::iterator iter;
std::vector<Pair<SetIterator> > distance_pair(std::distance(begin,end)); //to make space
computeDistances(begin, end, query, it.begin());
SetIterator pos = begin;
int i = 0;
for(iter = it.begin(); iter!=it.end();++iter,i++){
if (pos!=end){
Pair<SetIterator> set;
set.distance = *iter;
set.iterator = pos;
distance_pair[i] = set;
}
++pos;
}
Nun meine attemt eine sortierte Struktur Liste zu machen, wo die Reihenfolge der Entfernung wird in Werte accending, meine Vergleichsfunktion MyDataSortPredicate verwenden,
std::sort(distance_pair.begin(),distance_pair.end(),MyDataSortPredicate);
Der Fehler ist:
error: no matching function for call to 'sort'
std::sort(distance_pair.begin(),distance_pair.end(),MyDataSortPredicate);
^~~~~~~~~
main_test.cpp:51:2: note: in instantiation of function template specialization
'createSortedPointDistancePairs<std::__1::__wrap_iter<Vector *> >' requested here
createSortedPointDistancePairs(vector_contains.begin(), vector_contains.end(), query);
Und ziemlich mehr Text.
Ich habe Probleme mit Template-Parameter-Typen Lesen durch. Könnten Sie bitte einige Typedefs hinzufügen und möglicherweise die Quelle neu formatieren, um Ihre Absicht zu verdeutlichen? – rubicks