在子阵列C 中按第一个项目对数组进行排序
sort array by first item in subarray c++
我有一个数组数组,例如: [[4, 204], [10, 39], [1, 500]]
)。我想按子阵列的第一个元素对它们进行排序,以便它变为: [[1, 500], [4, 204], [10, 39]]
。
我找不到C++
的任何答案。
我将如何在C++
中执行此操作?
代码:
int n;
int time;
int timeTable[100][2];
if (inputFile.is_open()) {
for (int i = 0; i < 100; i++) {
inputFile >> n;
timeTable[i][0] = n;
inputFile >> time;
timeTable[i][1] = time;
}
}
对数组进行排序的一种方法是不排序数组本身。
相反,对数组内部指向的索引数组进行排序,然后使用排序的索引访问元素。这样做比在排序函数中操纵2D数组要容易得多。
通常,如果您有索引数组的内存(我们需要索引数组的其他存储),则对具有
的对象进行排序- 每个项目的有效载荷较大,
- 数组的原始顺序需要保留,或者
- 排序只是笨拙 1 或不可能在排序算法中轻松操纵,
可以使用此处描述的技术。
这是一个示例:
#include <algorithm>
#include <iostream>
int main()
{
int index[3] = {0,1,2};
int timeTable[3][2] = {{4, 204}, {10, 39}, {1, 500}};
std::sort(index, index + 3, [&](int n1, int n2){ return timeTable[n1][0] < timeTable[n2][0]; });
for (int i = 0; i < 3; ++i)
std::cout << "The index is " << index[i] << ". The data at this index is [" <<
timeTable[index[i]][0] << " " << timeTable[index[i]][1] << "]n";
}
实例示例
基本上,我们创建了一个初始索引数组,该索引数组从0到n-1
,其中n
是要排序的项目数。然后,我们在索引上调用std::sort
,在排序标准中,我们使用传递给分类谓词的索引中的实际数组中的项目进行比较。结果将是索引数组在排序过程中交换其元素,而不是交换原始数组的元素。
请注意,排序谓词非常简单 - 我们通过使用timeTable
数组上传递的索引来确切说明我们希望索引在排序中表示的内容。没有棘手,容易出错的或代码,如果其中一个项目不正确(例如,平行阵列方案 - 想象20个数组,则不得不交换20个项目,只是因为一个项目已输出订单)。
对索引进行排序后,当需要使用timeTable
数组时,我们使用索引数组指向项目(请注意我们如何使用timeTable[index[i]][0]
而不是timeTable[i][0]
指定索引)。
1 "笨拙"中包含类别是"平行的"阵列排序"出现在Stackoverflow上的问题,要求海报并行对多个阵列进行排序。基于其中一个数组中的数据。
- 显示错误输出的简单数组排序程序
- C 使用单个函数对具有多种值类型的数组排序
- 2D数组排序,空格打乱顺序
- C 2D数组排序
- C++数组排序 - 将"bbba"和"0001"视为不正确排序的问题
- 数组排序功能
- CString 数组排序
- 简单的数组排序/检查 划分和征服版本
- C++ 中的多维数组排序
- 选择在++中对并行数组排序
- C++:二维指针数组排序:选择排序不适用于某些实例
- C++字符串数组排序
- C++中的指针数组排序算法
- 在VC++6中使用向量进行数组排序时出错,而在VC++2012中没有错误
- 将索引数组排序为主数组
- 数组排序、数组输入、数组输出
- C++数组排序,内存错误
- 在嵌入式系统上将数组排序功能从c++移植到c
- 基于其他int数组排序
- 多维数组排序c++奇怪行为