gpt4 book ai didi

c++ - 使用排序函数对并行数组进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 12:34:21 25 4
gpt4 key购买 nike

我应该编写一个排序函数,将每月的降雨量英寸数(由用户输入)按升序排序。输出应该输出每月英寸的平行数组及其对应的月份。它应该看起来类似于“(月)x 英寸的雨”。 X 和 (month) 是并行数组的输出。但是,当我输入英寸雨时,没有输出。

我可能忽略了一些东西,但我觉得它可能很简单,比如我以错误的顺序调用函数,或者我没有正确输出排序的数组。我曾尝试在代码中移动排序和显示功能,也曾尝试更改措辞但无济于事。

#include <iostream>
#include <string>
using namespace std;

// Function Prototypes
void getMonthlyRainfall(double[], string[], int);
double getTotal(const double[], int);
int getHighestAmount(const double[], int);
int getLowestAmount(const double[], int);
void dualSort(double[], string[], int);
void swap(double&, double&);
void swap(string&, string&);
void showOrder(const double[], string[], int);

int main()
{
const int MONTHS = 12;
string monthNames[MONTHS] = { "January", "February", "March",
"April", "May", "June", "July", "August", "September", "October",
"November", "December" };
double rainfall[MONTHS], // Array
total,
average;
int lowestIndex,
highestIndex;

//Get rainfall input from user
getMonthlyRainfall(rainfall, monthNames, MONTHS);

// Get the total amount of rain for the year
total = getTotal(rainfall, MONTHS);

// Get the average rainfall
average = total / MONTHS;

// Get the month with the lowest rainfall
lowestIndex = getLowestAmount(rainfall, MONTHS);

// Get the month with the highest rainfall
highestIndex = getHighestAmount(rainfall, MONTHS);



cout << "Total rainfall: " << total << endl;
cout << "Average rainfall: " << average << endl;
cout << "Least rainfall in: " << monthNames[lowestIndex] << endl;
cout<< "Most rainfall in: "<< monthNames[highestIndex] << endl;

// Sort the array.
dualSort(rainfall, monthNames, MONTHS);

// Display sorted numbers
showOrder(rainfall, monthNames, MONTHS);



system("pause");
return 0;
}

这是代码的主要部分,但问题特别在于 showOrder 和 dualSort 函数。我将在下面添加这些内容。

//*************************************************
// This function sorts an array into ascending *
// order. *
//*************************************************

void dualSort(double rainfall[], string monthNames[], int size)
{
int start, minIndex;
double minValue;
string tempId;

for (start = 0; start < (size - 1); start++);
{
minIndex = start;
minValue = rainfall[start];
tempId = monthNames[start];

for (int index = start + 1; index < size; index++)
{
if (rainfall[index] < minValue)
{
minValue = rainfall[index];
tempId = monthNames[index];
minIndex = index;
}
}

swap(rainfall[minIndex], rainfall[start]);
swap(monthNames[minIndex], monthNames[start]);
}
}

//*************************************************
// The swap function swaps two int's in *
// memory. *
//*************************************************

void swap(double &a, double &b)
{
double temp;

temp = a;
a = b;
b = temp;
}

//***********************************************
// The swap function swaps two strings in *
// memory. *
//***********************************************

void swap(string &a, string &b)
{
string temp;

temp = a;
a = b;
b = temp;
}

//************************************************
// showOrder function displays sorted values *
//************************************************

void showOrder(const string monthNames[],const double rainfall[], int
num)
{
for (int index = 0; index < num; index++)
{
cout << rainfall[index] << "inches in " << monthNames[index]
<< endl;
}
cout << endl;
}

我没有收到任何编译器错误或消息,并且我能够毫无问题地执行程序的其余部分。唯一的问题是,当我期望有一个升序输出时,没有任何输出。

编辑——我可能应该更清楚地了解我的代码。选择排序的代码是直接来 self 的教科书的算法,所以它应该是正确的。因为此代码是建立在我之前编写的代码之上的,该代码需要一个用于降雨和 monthNames 的并行数组,所以我需要在这个实例中使用并行数组来对字符串和 double 组进行排序。我的代码中包含更多代码和更多功能,但我没有在此处发布,因为它们工作正常。其中一个功能是让并行数组关联降雨量和月份名称。

调试器没有太大帮助,除非我使用不当。是否有其他方法可以按升序对并行数组进行排序,因为如果有,我无法在网上或在我的书中找到它?在这一点上,我什至不确定问题是什么。即使在一行一行地尝试找出它的逻辑之后,我仍然看不到问题所在。我能够输出我正确编写的其他函数,所以除非我需要在我的 dualSort 函数中再次关联两个数组,或者我在某处缺少 return 语句,否则我不知道还能尝试什么。

最佳答案

您可以配对引用,然后对数组进行排序。

void dualSort(double rainfall[], string monthNames[], int size)
{
std::vector<std::pair<double&, std::string&> > tied;
tied.reserve(size);
auto tie = [](double & rain, std::string & month){ return std::tie(rain, month); };
std::transform(rainfall, rainfall + size, monthNames, std::back_inserter(tied), tie);
std::sort(tied.begin(), tied.end());
}

关于c++ - 使用排序函数对并行数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57083941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com