一、工作场景:
在实际工作场景中,对两个数组中的数据进行了分析比对:滑动窗口式。
每移动一次就计算并记录相关系数,以及当前偏移下标值。
最后要对所有计算出的相关系数及下标值进行排序:
- 相关系数从大到小排序;
- 相关系数相同的情况下,偏移下标从小到大排序。
二、代码说明:
程序实现时结合 vector 容器自身功能,应用了运算符重载技术,并且巧妙地把比较条件放到 return 语句中。
三、实现代码:
- 数据结构定义:
//定义结构:存放相关系数、当时位移
struct MyData
{
double Rmax;
long Jmax;
MyData(double Rmax, long Jmax) : Rmax(Rmax), Jmax(Jmax) {}
//排序条件:1、Rmax 从大到小降序;2、Rmax相同的情况下,按 Jmax 从小到大升序。
bool operator < (const MyData& rhs) const {
return (Rmax < rhs.Rmax) || (Rmax == rhs.Rmax && Jmax > rhs.Jmax); ;
}
};
- 排序使用示例:
vector<MyData> vecRmax;
......
//计算相关系数
dResult = gama(vecDf, vecTData, sizeOfShort - iStartShort);
vecRmax.emplace_back(dResult, jj);
......
// 比对结果排序:降序方式 (相似度最大的排最前面)
sort(vecRmax.rbegin(), vecRmax.rend());