Ich möchte einen Vektor von T nach einem Vektor von double sortieren. Das heißt, wenn ich habe
vector<T> a;
vector<double>b;
Si a
es {t1, t2, t3, t4}
y b
es {3, 1, 5, 2}
möchte ich erhalten {t2, t4, t1, t3}
.
Ich weiß nicht, wie ich die Vorlage deklarieren soll. Ich versuche etwas wie
template<vector<class T>> vector<T> sortByArray(vector<T> a, vector<double>b)
Und ich habe auch keine Ahnung, wie ich den Funktionskörper schreiben soll.
Danke.
EDIT: Dies ist die Anwendung meines Algorithmus. Ich bekomme es nicht richtig hin.
template <typename T> struct dataPair
{
dataPair(double s, T o)
: m_sortData(s)
, m_otherData(o)
{
}
bool operator< (const dataPair &rhs) { return (m_sortData < rhs.m_sortData); }
double m_sortData;
T m_otherData;
}
template <class T> vector<T> sortByArrayStuff(vector<T> objects, vector<double> sortNumber) {
vector<dataPair<T>> v;
for (unsigned int i = 0; i < objects.size(); i++) {
v.push_back(dataPair<T>(objects[i], sortNumber[i]));
}
sort(v.begin(), v.end());
vector<T> retVal;
for (unsigned int i = 0; i < objects.size(); i++) {
retVal.push_back(dataPair<T>(objects[i], sortNumber[i]));
}
return retVal;
};
Ich möchte dieselbe Vorlage für Vektoren von "Punkten" und Vektoren von Vektoren von "Punkten" verwenden:
vector<double> sortedAreas;
vector<Point> sortedPoints = sortByArray<vector<Point>>(points, sortedAreas);
vector<vector<Point>> sortedContours = sortByArray<vector<vector<Point>>>(contours, sortedAreas);
Fehler ist
cannot convert parameter 1 from 'dataPair<T>' to 'cv::Point &&'
with
[
_Ty=cv::Point
]
and
[
T=cv::Point
]
Reason: cannot convert from 'dataPair<T>' to 'cv::Point'
with
[
T=cv::Point
]