Je veux trier un vecteur de T en fonction d'un vecteur de double. C'est-à-dire que si j'ai
vector<T> a;
vector<double>b;
Si a
es {t1, t2, t3, t4}
y b
es {3, 1, 5, 2}
Je veux obtenir {t2, t4, t1, t3}
.
Je ne sais pas comment déclarer le modèle. J'essaie quelque chose comme
template<vector<class T>> vector<T> sortByArray(vector<T> a, vector<double>b)
Et je n'ai aucune idée de la façon d'écrire le corps de la fonction non plus.
Merci.
EDIT : C'est l'utilisation de mon algorithme. Je n'y arrive pas.
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;
};
Je veux utiliser le même modèle pour les vecteurs de "Points" et les vecteurs de vecteurs de "Points" :
vector<double> sortedAreas;
vector<Point> sortedPoints = sortByArray<vector<Point>>(points, sortedAreas);
vector<vector<Point>> sortedContours = sortByArray<vector<vector<Point>>>(contours, sortedAreas);
L'erreur est
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
]