gpt4 book ai didi

c++ - 如何在 C++ 中排序和显示对象列表?

转载 作者:行者123 更新时间:2023-11-28 07:16:31 25 4
gpt4 key购买 nike

我正在开发一个航类预订系统,用户可以在该系统中选择他们希望如何对列表进行排序和显示。本质上,我创建了一个对象列表,其中对象成员是一些城市的名称和代码。但是,我不确定如何按对象成员对该列表进行排序,然后显示该列表的成员。这是我创建和填充列表的地方。

城市类定义:

#ifndef CITY_H
#define CITY_H
#include <iostream>
#include <list>

using namespace std;

class City
{
protected:
string name;
string code;

public:
City()
{
name = "";
code = "";
}
void setName(string);
void setCode(string);
void addCities();
void displayCities(const list<City> &);

string getName();
string getCode();

friend ostream& operator<< (ostream& , City &);

};

ostream& operator<< (ostream& , City &);
#endif //CITY_H

void City::addCities()
{
ifstream cities;
cities.open("cities.dat");

list<City> cityList;

string co = "", na = "";

while (!cities.eof())
{
City c;
cities >> co;
cities >> na;

c.setCode(co);
c.setName(na);

cityList.push_back(c);
}
displayCities(cityList);
}

这是包含我正在加载到列表中的信息的文本文件:

ATL Atlanta
ORL Orlando
DFW Dallas/Fort_Worth
NYC New York City
HAW Hawaii
CHI Chicago
LAX Los_Angeles

这是我显示列表的尝试:

void displayCities(const list<City> &cityRef)
{
list<City>::iterator it;
for (it == cityRef.begin(); it != cityRef.end(); ++it)
{
std::cout << (*it) << std::endl;
}
}

ostream& operator <<(ostream& s, City& c)
{
s << c.name << c.code;
return s;
}

最佳答案

而不是 addCities你真的想重载operator>>为你的City类:

struct City { 
std::string code, name;

friend std::istream &operator>>(std::istream &is, City &c) {
return is >> c.code >> c.name;
}
};

然后你可以像这样读取数据(顺便说一句,你目前做错了):

std::ifstream cities("cities.dat");
std::vector<City> CityList{std::istream_iterator<City>(cities),
std::istream_iterator<City>());

然后排序如下:

std::sort(cities.begin(), cities.end(), 
[](City const &a, City const &b) { return a.code < b.code; });

你可以像这样写出结果:

for (auto const &city : CityList) 
std::cout << city << "\n";

请注意,我制作了 CityList一个 vector 而不是 std::list -- 后者往往是一个错误。

关于c++ - 如何在 C++ 中排序和显示对象列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20155431/

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