用多维数组跟踪C ++中的指标

时间:2016-02-21 18:13:18

标签: c++ arrays multidimensional-array

我正在处理一个项目,我需要将数组从最小到最大排序,但保存索引的值。例如,对于数组{2,7,8,1,3},排序的索引将是{3,0,4,1,2}。我以为我可以使用二维数组来完成这个任务;我会为每个组件添加索引,对数组进行排序,然后从第二个元素中检索原始索引。它并没有像我希望的那样为我工作,我现在的代码如下,它一直给我一个分段错误。我不知道自己做错了什么,但我在for for循环中假设了它。

#include <iostream>
#include <algorithm>

using namespace std;

const int SIZE = 7;

int main()
{
  int intArray[SIZE] = {5, 3, 32, -1, 1, 104, 53};
  int i, j, k, l = 0;
  int temp[SIZE][2];

  //fills multidimensional array temp with data from intArray or index #
  for(i = 0; i < 7; i++){
    for(j = 0; j < 2; j++){
      switch (j)
    {
    case '0':
      temp[i][j] = *intArray;
      break;
    case '1':
      temp[i][j] = i;
      break;
      }
    }
  } 

  sort(intArray, intArray + SIZE);

  //prints each component of temp individually
  cout << "Sorted Array looks like this." << endl;
  for (k = 0; i < 7; i++){
    for (l = 0; j < 2; i++){
      cout << &temp[k][l] << endl;
    }
  }
  return 0;
}

3 个答案:

答案 0 :(得分:1)

以下循环更简单,并且应该做到:

for(i = 0; i < 7; i++){
    temp[i][0] = intArray[i];
    temp[i][1] = i;
}

代码中的一个错误就是

temp[i][j] = *intArray;

这总是指定intArray的第一个元素。

导致分段错误的原因可能是&amp;在输出语句中,只需删除它。

除此之外,我同意RyanP评论中的建议。

答案 1 :(得分:0)

使用std :: map。代码将是最简单的。在cpp.sh上进行测试

#include <iostream>
#include <map>

int main()
{
    std::map<int,int>arr = {{5,0}, {3,1}, {32,2}, {-1,3}, {1,4}, {104,5}, {53,6}};
    for(auto&x:arr) std::cout << x.first << " - > " << x.second << std::endl;
  return 0;
}

答案 2 :(得分:0)

我最终使用Frank Puffer所说的并选择使用简单的冒泡排序而不是使用任何内置函数。这是我的最终程序http://ideone.com/cpEgGA

的链接
#include <iostream>
#include <algorithm>

using namespace std;

const int SIZE = 7;

int main()
{
  int intArray[SIZE] = {5, 3, 32, -1, 1, 104, 53};
  int i, j, k, l, m = 0;
  int temp2[SIZE][2];
  int indices[SIZE] = {};

  for(i = 0; i < 7; i++){
    temp2[i][0] = intArray[i];
    temp2[i][1] = i;
  }

  cout << "Unsorted Array looks like this." << endl;
  for (j = 0; j < 7; j++){
    cout << temp2[j][0];
    cout << " : ";
    cout << temp2[j][1] << endl;
  }

  for(k = 0; k < SIZE; k++)
    {
      for(j = 0; j < SIZE-1-k; j++)
    {
      if(temp2[j+1][0] < temp2[j][0])
        {
          l = temp2[j][0];
          temp2[j][0] = temp2[j+1][0];
          temp2[j+1][0] = l;
          l = temp2[j][1];
          temp2[j][1] = temp2[j+1][1];
          temp2[j+1][1] = l;
        }
    }
    }

  cout << "Sorted Array looks like this." << endl;
  for (m = 0; m < SIZE; m++)
    {
      cout << temp2[m][0];
      cout << " : ";
      cout << temp2[m][1] << endl;
    }

  for(i = 0; i < SIZE; i++){
    indices[i] = temp2[i][1];
  }

  cout << "Indices of Sorted Array look like this." << endl;
  for(i = 0; i < SIZE; i++){
    cout << indices[i] << endl;
  }

  return 0;
}