【C++】代码实现:结合 vector 容器功能,通过运算符重载技术巧妙实现多条件排序。

一、工作场景:

在实际工作场景中,对两个数组中的数据进行了分析比对:滑动窗口式。

每移动一次就计算并记录相关系数,以及当前偏移下标值。

最后要对所有计算出的相关系数及下标值进行排序:

  1. 相关系数从大到小排序; 
  2. 相关系数相同的情况下,偏移下标从小到大排序。 

二、代码说明:

程序实现时结合 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());  

猜你喜欢

转载自blog.csdn.net/kingkee/article/details/94430113