n32*_*303 3 c++ arrays sorting
我是编程初学者,我有一个问题。我必须创建二维数组 [5][3] ...让我们说这是其中一部分的示例:
然后我必须得到行的总和并将其写在此旁边:
现在,我必须按此总和对数组进行排序,因此结果如下所示:
我不知道如何实现这一点,这是我的代码:
#include <iostream>
#include <time.h>
using namespace std;
void tocke(int polje[5][3])
{
int vsota;
srand(time(NULL));
int sums[5];
for (int i = 0; i < 5; i++)
{
vsota = 0;
cout << endl;
cout << i + 1 << ". ";
for (int j = 0; j < 3; j++){
polje[i][j] = (rand() % 10 + 1);
vsota += polje[i][j];
sums[i] = vsota;
cout << polje[i][j] << " ";
}
}
}
void urejaj(int polje[5][3])
{
cout << "\n\n\n\n" << endl;
int sums[5];
int vsota ;
double temp;
for (int i = 0; i < 5; i++)
{
vsota = 0;
cout << endl;
cout << i + 1 << ". ";
for (int j = 0; j < 3; j++)
{
vsota += polje[i][j];
sums[i] = vsota;
if (sums[i] < sums[i+1])
{
temp = polje[i][j];
polje[i][j] = polje[i + 1][j];
polje[i + 1][j] = temp;
}
cout << polje[i][j] << " ";
}cout << sums[i];
}
}
int main()
{
int polje[5][3];
tocke(polje);
urejaj(polje);
cout << "\n";
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
第一个函数在字段中写入元素,第二个函数必须对字段进行排序。
通过更改数据结构,您的问题可能更容易解决。有一个结构数组,而不是一个数组数组。该结构将包含总和和值数组。
struct Row
{
int sum;
std::vector<int> values;
};
Row data[5];
Run Code Online (Sandbox Code Playgroud)
有了这个概念,您就可以按总和对行进行排序。
您可以轻松地为此编写一个比较器并使用std::sort:
bool Compare_Rows(const Row& a, const Row &b)
{
return a.sum < b.sum;
}
//...
std::sort(&data[0], &data[5], Compare_Rows);
Run Code Online (Sandbox Code Playgroud)
编辑 1 - 重载运算符 <
您可以通过提供重载运算符来简化并且不需要比较器<:
struct Row
{
int sum;
std::vector<int> values;
bool operator<(const Row& other)
{
return sum < other.sum;
}
};
Run Code Online (Sandbox Code Playgroud)
排序调用现在变为:
std::sort(&data[0], &data[5]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17816 次 |
| 最近记录: |