我想根據雙向向量對T的向量進行排序。也就是說,如果我有C++根據雙向量向量<T>排序向量
vector<T> a;
vector<double>b;
如果a
是{t1, t2, t3, t4}
和b
是{3, 1, 5, 2}
,我想獲得{t2, t4, t1, t3}
。
我不知道如何聲明模板。我正在嘗試類似
template<vector<class T>> vector<T> sortByArray(vector<T> a, vector<double>b)
而且我也不知道如何編寫函數體。
謝謝。
編輯:這是我的算法的用法。我不明白。
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;
};
我想使用相同的模板「點」的向量的「點」的載體和載體:
vector<double> sortedAreas;
vector<Point> sortedPoints = sortByArray<vector<Point>>(points, sortedAreas);
vector<vector<Point>> sortedContours = sortByArray<vector<vector<Point>>>(contours, sortedAreas);
錯誤是
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
]
你的'a'和'b'與你的結果之間有什麼關係?我似乎無法找到它。 – 2011-05-03 16:12:00
不要寫一個新的函數。寫一個你提供給'std :: sort'的比較器。 (但你的意思是'模板',並且可能應該接受那些函數參數作爲'refs-to-const')。 –
2011-05-03 16:12:39
http://www.stanford.edu/~dgleich/notebook/2006/03/sorting_two_arrays_simultaneou.html – Adam 2011-05-03 16:32:53