gpt4 book ai didi

C++ 根据 double 的 vector 对 的 vector 进行排序

转载 作者:太空狗 更新时间:2023-10-29 21:50:35 27 4
gpt4 key购买 nike

我想根据 double 的 vector 对 T 的 vector 进行排序。也就是说,如果我有

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 和“点” vector 的 vector 使用相同的模板:

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
]

最佳答案

您应该做的是像这样创建一个structclass:

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;

}

然后,您创建一个包含这些dataPair 类型的 vector

{
// your code ...
// that assumes b is is a std::vector<YourType>

// create vector and populate it
std::vector<dataPair<YourType>> v;
v.push_back(dataPair<YourType>(a[0],b[0]));
v.push_back(dataPair<YourType>(a[1],b[1]));
v.push_back(dataPair<YourType>(a[2],b[2]));
v.push_back(dataPair<YourType>(a[3],b[3]));

std::sort(v.begin(),v.end());

// your code (now they will be sorted how you like in v)

编辑:有一些错别字

EDIT2:您也可以使用仿函数来提高效率,但这是基本思想。

编辑 3:Using functors with sort is described very nicely here. See where they use the functor myclass in which they overload operator(). This allows compile-time optimizations to be made (because from std::sort's perspective the sorting criterion is a template type)

关于C++ 根据 double 的 vector 对 <T> 的 vector 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5872415/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com