C++ 将字符串数组和Int数组并排排序

C++ 将字符串数组和Int数组并排排序,c++,arrays,C++,Arrays,希望你能帮忙。我还有一个项目要做,我有点卡住了。对于这个项目,我们正在做一个简单的石头,布,剪刀游戏。除了所需的highscore函数外,我几乎已经为此进行了所有设置。教授希望我们按照最高分的顺序打印出前三名的高分 我如何设置代码是因为我有两个独立的数组,highscore[]和highscoreNames[]。我需要弄清楚如何将highscore[]从最大值到最小值排序,同时还要将highscoreNames[]中的名字与其分数配对 感谢您的帮助,如果您需要更多信息,请咨询 最简单的方法是为高

希望你能帮忙。我还有一个项目要做,我有点卡住了。对于这个项目,我们正在做一个简单的石头,布,剪刀游戏。除了所需的highscore函数外,我几乎已经为此进行了所有设置。教授希望我们按照最高分的顺序打印出前三名的高分

我如何设置代码是因为我有两个独立的数组,highscore[]和highscoreNames[]。我需要弄清楚如何将highscore[]从最大值到最小值排序,同时还要将highscoreNames[]中的名字与其分数配对


感谢您的帮助,如果您需要更多信息,请咨询

最简单的方法是为高分和高分名称使用一个容器:

struct High_Score_Info
{
  unsigned int score;
  std::string  name;
};

//...
std::vector<High_Score_Info> scores;
struct High\u Score\u Info
{
无符号整数分数;
std::字符串名;
};
//...
std::向量分数;
这将允许您在排序期间将分数和名称保持在一起

编辑1:

如果不允许使用结构,则需要编写自己的排序例程。移动分数数组中的项目时,也要移动名称数组中的相同项目(相同索引)

结构是一种更好的方法。尽管仅使用索引也会有所帮助,但排序分数和在两个数组中交换:

for(i = 1; (i <= numLength); i++)
     {
          for (j=0; j < (numLength -1); j++)
         {
               if (highscore[j+1] > highscore[j])      
                { 
                    int temp = highscore[j];            
                    highscore[j] = highscore[j+1];
                    highscore[j+1] = temp;
                    string tempName = highscoreNames[j];            
                    highscoreNames[j] = highscoreNames[j+1];
                    highscoreNames[j+1] = temp;

               }
          }
     }
for(i=1;(i高分[j])
{ 
内部温度=高分[j];
高分[j]=高分[j+1];
高分[j+1]=温度;
字符串tempName=highscoreNames[j];
highscoreNames[j]=highscoreNames[j+1];
highscoreNames[j+1]=临时;
}
}
}

您可以创建一个正式的配对数据结构,就像@Thomas建议的那样,也可以创建第三个数组,其中包含已排序分数的索引。这样您就不需要实际重新排序数据数组。例如,它可能是这样的:

highscore = {5, 2, 4, 1, 6};
highscoreNames = {"a", "b", "c", "d", "e"};
sortedIndeces = {4, 0, 2, 1, 3};
然后,只需使用
sortedIndeces
索引即可

for (int i = 0; i < 5; i++) {
    highscore[sortedIndeces[i]]; //6, 5, 4, 2, 1
    highscoreNames[sortedIndeces[i]]; //e, a, c, b, d
}
for(int i=0;i<5;i++){
高分[sortedIndeces[i]];/6,5,4,2,1
高分名字[sortedIndeces[i]];/e,a,c,b,d
}

您好,感谢您的快速响应,这似乎是最有可能与我的代码一起使用的。不管怎样,变量numLength来自何处?它是数组的大小吗?抱歉,如果这是一个愚蠢的问题,我对C++还是非常陌生的。好,因此出于某种原因,在使用此选项时,它会弹出一条错误消息,文本为:Unhandled exceAssign2.exe中0x00F98A16处的选项:0xC0000005:访问冲突写入位置0x00000000。知道原因吗?只需正确检查数组边界一次,并根据您的代码放置它们。在循环之前初始化字符串tempName=“”。应该可以正常工作。