所以,我得到了我的老师给我的这个项目,我很新,所以遇到了一个小问题。基本上,我需要输入一些citite及其人口,并且我需要按从人数最多的人到人数最少的人的顺序输出它们。我使用结构来存储有关每个城市的信息,现在,如果您知道我的意思,我不知道如何将人口“连接”到每个城市。谢谢!
这是它的外观,对于不了解该问题的人们,我得到了城市人口,并按从高到低的顺序对其进行了排序,现在我要显示城市的名称及其人口旁边,但我不知道现在如何将它们添加在一起。
struct city
{
string name;
int population;
}cityVar[10];
int main()
{
// Input
for (int i = 0; i < 5; i++)
{
cin >> cityVar[i].name;
cin >> cityVar[i].population;
}
int i, j;
int temp;
for (i = 0; i < 5; i++)
{
for (j = i + 1; j < 5; j++)
{
if (cityVar[i].population < cityVar[j].population)
{
temp = cityVar[i].population;
cityVar[i].population = cityVar[j].population;
cityVar[j].population = temp;
}
}
}
for (i = 0; i < 5; i++)
{
cout << cityVar[i].population << " ";
}
}
答案 0 :(得分:3)
您不连接两个变量。当它们属于同一概念时,可以将它们组合在一起。
在这种情况下,我建议您通过创建一个city
来为struct
创建一个抽象,并指导其如何将自己与其他城市进行比较(在这种情况下)人口。
您可以通过实现operator<
struct city{
unsigned population
bool operator<(const city& c1){
return this.population < c1.population;
}
};
然后可以将元素添加到数组中,甚至可以将其添加到std::vector
中,然后使用std::sort
对它们进行排序。
由于这听起来像是一项家庭作业,所以我会将其余的留给您。您应该可以从这里自行继续。
答案 1 :(得分:1)
您失去了“联系”,因为您只在应该交换整个城市时交换了人口:
city temp = cityVar[i];
cityVar[i] = cityVar[j];
cityVar[j] = temp;
或者,就像我们经常写的那样
std::swap(cityVar[i], cityVar[j]);
答案 2 :(得分:0)
您需要交换整个对象,有很多方法可以执行此操作,但是根据您所学的内容,您需要注意使用哪种方法。这绝不是一个详尽的清单,我只展示了我能想到的最简单的清单。...
最简单的方法(但需要另外两行)并且取决于数据结构,因此请使用临时城市而不是临时int。
struct city temp;
:
:
:
if (cityVar[i].population < cityVar[j].population)
{
temp.population = cityVar[i].population;
temp.name = cityVar[i].name;
cityVar[i].population = cityVar[j].population;
cityVar[i].name = cityVar[j].name;
cityVar[j].population = temp.population;
cityVar[j].name = temp.name;
}
另一种方法是将指针列表用于排序列表
int main()
{
struct city *cityVarSorted[10];
for (int i = 0; i < 5; i++) // initialise list to point to current structs
{
cityVarSorted[i] = &cityVar[i];
}
:
:
struct city *temp;
:
if (cityVarSorted[i]->population < cityVarSorted[j]->population)
{
temp = cityVarSorted[i]; // we're swapping the pointer now and not the individual members
cityVarSorted[i] = cityVarSorted[j];
cityVarSorted[j] = temp;
}
}
当然是如果您被教过指针。您需要了解它的工作原理,以便能够对其进行解释