我很难根据特定列的值在矩阵(嵌套数组)中交换行,我正在制作一个控制台应用程序,该应用程序显示足球世界杯小组赛的结果,所以我首先插入游戏结果以更新每队(行)的统计数据并生成输入数组,但最后,我需要根据每个队的点数(每行的最后位置)对行进行排序。我需要创建一个函数来生成输出数组。
输入数组:
inputArray[4][7] {
{0, 2, 1, 1, 3, -2, 2},
{1, 1, 1, 3, 3, 0, 4},
{2, 0, 1, 3, 1, 2, 6},
{1, 1, 1, 2, 2, 0, 4},
}函数的输出数组:
outputArray[4][7] {
{2, 0, 1, 3, 1, 2, 6},
{1, 1, 1, 3, 3, 0, 4},
{1, 1, 1, 2, 2, 0, 4},
{0, 2, 1, 1, 3, -2, 2},
}发布于 2022-10-13 08:16:18
解决办法很简单。但我猜这不是你想要的。
而且,我认为行中的最后一个值不是和。。。
但让我们先看看一个潜在的解决方案:
#include <iostream>
#include <algorithm>
#include <array>
constexpr size_t NumberOfRows = 4u;
constexpr size_t NumberOfColumns = 7u;
using Columns = std::array<int, NumberOfColumns>;
using Array = std::array<Columns,NumberOfRows>;
int main() {
Array array{{ {0, 2, 1, 1, 3, -2, 2},
{1, 1, 1, 3, 3, 0, 4},
{2, 0, 1, 3, 1, 2, 6},
{1, 1, 1, 2, 2, 0, 4} }};
std::sort(std::begin(array), std::end(array), [](const Columns& c1, const Columns& c2) {return c1[6] < c2[6]; });
for (const Columns& c : array) {
for (const int i : c) std::cout << i << '\t';
std::cout << '\n';
}
}如果希望数组是动态的,则可以使用std::vector。然后可以调整行数和列数。
#include <iostream>
#include <algorithm>
#include <vector>
constexpr size_t NumberOfRows = 4u;
constexpr size_t NumberOfColumns = 7u;
using Columns = std::vector<int>;
using Array = std::vector<Columns>;
int main() {
Array array{ {0, 2, 1, 1, 3, -2, 2},
{1, 1, 1, 3, 3, 0, 4},
{2, 0, 1, 3, 1, 2, 6},
{1, 1, 1, 2, 2, 0, 4} };
std::sort(std::begin(array), std::end(array), [](const Columns& c1, const Columns& c2) {return c1[6] < c2[6]; });
for (const Columns& c : array) {
for (const int i : c) std::cout << i << '\t';
std::cout << '\n';
}
}但我仍然认为这是错误的设计。因为行中的最后一个值是其他值的总和。它是依赖的,可以计算,不需要存储ist。
请参阅下列更好的设计:
#include <iostream>
#include <algorithm>
#include <vector>
#include <numeric>
struct Result {
std::vector<int> values{};
int sum() const { return std::accumulate(values.begin(), values.end(), 0); }
friend std::ostream& operator << (std::ostream& os, const Result& r) {
for (const int i : r.values) os << i << '\t';
return os << "--> " << r.sum();;
}
};
struct Series {
std::vector<Result> results{};
friend std::ostream& operator << (std::ostream& os, const Series& s) {
for (const Result r : s.results) os << r << '\n';
return os;
}
};
int main() {
Series series{{
{{0, 2, 1, 1, 3,-2}},
{{1, 1, 1, 3, 3, 0}},
{{2, 0, 1, 3, 1, 2}},
{{ 1, 1, 1, 2, 2, 0}}
}};
std::sort(series.results.begin(), series.results.end(), [](const Result& r1, const Result& r2) {return r1.sum() < r2.sum(); });
std::cout << series;
}但是你没有给出足够的信息来给出一个好的答案。
https://stackoverflow.com/questions/74051444
复制相似问题