如何将数组元素与其他变量“连接”?

时间:2019-03-29 08:01:55

标签: c++

所以,我得到了我的老师给我的这个项目,我很新,所以遇到了一个小问题。基本上,我需要输入一些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 << " ";
    }
}

3 个答案:

答案 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;
  }
}

当然是如果您被教过指针。您需要了解它的工作原理,以便能够对其进行解释