用c++对我的2d数组进行排序

Sorting my 2d array in c++

本文关键字:排序 数组 2d c++ 我的      更新时间:2023-10-16

我的家庭作业程序必须将到达时间和突发时间的随机数写入文件中。然后在它们被写入之后,它读取文件并对内容进行排序。

我认为建立一个2d阵列将是我实现这一目标的最简单方法。但我不确定如何实现我的排序,这样,如果到达时间交换了位置,那么到达的突发时间也会随之而来。

我觉得我的措辞很糟糕,但一个基本的例子是:

array[3][10] > array[2][23]

因此,由于第二个数组的到达时间较早,我需要它的到达2和突发23都在array[3][10]之前移动,但我需要这样做并比较100个输入。

#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <fstream>
const int max = 100;
using namespace std;
int main()
{
    multimap<int [][]> myMap;
    int randomBurst[max];
    int arrivalTime[max];
    int line[max][2];
    int first = 0;
    for (int i = 0; i < 100; i++)
    {
        if (i < 100)
        {
            ofstream write("Schedule.txt", ios::app);
            randomBurst[i] = rand() % 1000;
            arrivalTime[i] = rand() % 1000;
            write << arrivalTime[i] << " " << randomBurst[i] << endl;
        }
    }
    ifstream read("Schedule.txt");
    for (int i = 0; i <= max; i++)
    {
        for (int j = 0; j < 2; j++)
        {
            read >> line[i][j];
            cout << line[i][j] << " " ;
        }
        cout << endl;
    }
    cout << endl;
    cout << endl;
    for (int i = 0; i <= max; i++)
    {
    for (int j = 0; j < 2; j++)
    {
        myMap.insert(pair<int[][]>(line[i][j]);
    }
    cout << endl;
    }
    system("pause");
    return 0;
}

我的代码在读取写入的文件内容后正确地设置了数组,但我有点迷失了应该实现的排序。

说到这里,主要是留下评论,以便在我的笔记本电脑上更快地找到这个问题。

正如我在评论中所说,如果你想要一个按键值预先排序的2D"数组",最快的方法就是使用映射容器。,如果你真的需要对内部点进行排序,并且你将在其中使用多个条目,比如条目2,30,12。。。您可以构建向量或数组的映射,也可以使用多映射。对这个数据结构不太确定,因为我从来没有真正的理由使用它。此处引用http://www.cplusplus.com/reference/map/multimap/

以上内容将为您提供为您所做的排序,我推荐向量的原因是它内部缺乏顺序,并且不确定"是否爆发?"也要订购。

编辑:忘了提一下,地图上不会有超过一个给定值的键,所以如果你再次输入上面的多个点,那么你会的。如果像以前一样实现,请覆盖它。

编辑:所以这或多或少是我认为我已经解决的问题,但你正在以一种非常间接的方式解决这个问题,这很难诚实地遵循。

    #include <map>
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <fstream>
using namespace std;
const int MAX = 100;
int main()
{
  multimap<int,int> myMap;
  int randomBurst[100];
  int arrivalTime[100];
  int line[100][2];
  int first = 0;
  for (int i = 0; i < 100; i++)
    {
      if (i < 100)
        {
          ofstream write("Schedule.txt", ios::app);
          randomBurst[i] = rand() % 1000;
          arrivalTime[i] = rand() % 1000;
          write << arrivalTime[i] << " " << randomBurst[i] << endl;
        }
    }
  ifstream read("Schedule.txt");
  for (int i = 0; i <= 100; i++)
    {
      for (int j = 0; j < 2; j++)
        {
          read >> line[i][j];
          cout << line[i][j] << " " ;
        }
      cout << endl;
    }
  // cout << endl;                                                              
  // cout << endl;                                                              
  for (int i = 0; i < 100; i++)
    {
      for (int j = 0; j < 2; j++)
        {
          //Attain the value in the index, and the held value within it.        
          myMap.insert(pair<int, int> (line[i][j], line[i][j]));
        }
      cout << endl;
    }
  //    system("pause");                                                        
  return 0;

这修复了插入点,仅仅因为你给它一个数组并不意味着程序会把它作为一对,因为第一个索引本身就是指向另一个数组的点。等等。我建议从一个映射对象开始,因为多映射会让事情变得有点烦人,如果你熟悉向量容器,那么在映射中使用它来记录多个值。