Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过比较输入来安排输出_C++_Sorting - Fatal编程技术网

C++ 通过比较输入来安排输出

C++ 通过比较输入来安排输出,c++,sorting,C++,Sorting,我有两个数据集,如下所示: set1:57.527655.375624.279854.5989 及 set2:55.111855.004 24.82457.1398 现在我想排列第二组,使其与第一组最接近(我的意思是57.1398 55.1118 24.824 55.004此顺序)。 如何在C++中实现这一点。< p>安排第二组,使其按照与第一组相同的方式排序。 更具体地说,第一组从最大数(57.5276)到第二大数(55.3756),再到第四大数到第三大数 以同样的方式排列第二组。依次为最大(

我有两个数据集,如下所示:

set1:
57.527655.375624.279854.5989

set2:
55.111855.004 24.82457.1398

现在我想排列第二组,使其与第一组最接近(我的意思是
57.1398 55.1118 24.824 55.004
此顺序)。
如何在C++中实现这一点。

< p>安排第二组,使其按照与第一组相同的方式排序。

更具体地说,第一组从最大数(
57.5276
)到第二大数(
55.3756
),再到第四大数到第三大数

以同样的方式排列第二组。依次为最大(
57.1398
),第二大(
55.004
),第四大(
24.824
),第三大(
57.1398
)。这将使相同索引项之间的平均差异最小化

从编程的角度来说,实现这一点的一个简单方法是对两个集合进行排序,然后在第一个集合中找到每个数字的排序索引,并按照相同的顺序排列第二个集合

应该更好地指定匹配的“最近的”。例如,“最小平方误差”、“最小绝对误差”、“最大相关性”,所有这些都会给出不同的结果

根据“最接近”的含义,您可能需要经历set2的所有排列,这将非常昂贵。如果你想使用“排序两个集合”的解决方案,那么在C++中实现这一方法的同时保持第一个集合的顺序是创建一个索引向量到SET1,并根据SET1

中的值对其进行排序。
std::vector<double> set1{{57.5276,55.3756,24.2798,54.5989}};
std::vector<size_t> set1index(set1.size());
std::iota(set1index.begin(), set1index.end(), 0);
std::sort(set1index.begin(), set1index.end(), [&](size_t a, size_t b){return set1[a] < set1[b];});
std::vector set1{{{57.5276,55.3756,24.2798,54.5989};
std::vector set1索引(set1.size());
std::iota(set1index.begin(),set1index.end(),0);
排序(set1index.begin(),set1index.end(),[&](大小a,大小b){return set1[a]

然后,您可以对set2进行排序,并使用索引以set2的值重新创建set1的顺序。

我删除了数据库标记,因为您的问题似乎与数据库没有直接关系。计算距离(即减法的绝对值)在set1到set2中的所有数字之间,为set2中的每个数字选择set1中最接近的数字?有问题的数据集的大小是什么?您是否希望针对某些特定指标(CPU时间、内存消耗)进行优化?第一个集合在计算后是否应该保持不变并保持相同的顺序?问题很复杂。需要更多的信息。。。例如,电视机的尺寸是否总是一样的?应如何处理set2;是一个值得考虑的“消费”之后,还是应该是最接近的?如果两个或多个值具有相同的距离怎么办?如果两个或多个值与set1中的不同值具有相同的距离,该怎么办?嗨,问题是我不应该更改第一个集合的排列。当然,对于第一个集合中的每个元素,查看所有其他元素,看看有多少个元素小于该元素。这个数字是你想要的索引。或者,您可以创建一个单独的重复集并对其进行排序。