0

我有一组包含城市、国家、纬度和纬度的数组。c++语言。

ifstream file("worldcities.csv");
getline(file, temporay);
//inputs the file into 4 arrays for each catergories
for (i=0;getline(file,(cities[i]),',');i++)
{
getline(file, countries[i], ',');
getline(file, latitude[i], ',') ;
getline(file, longitude[i]);
}

我如何同时对纬度和经度数组进行排序,以找到列表中所有其他人的前五个最低或最高但同时不丢失与这些纬度和经度相关联的城市和国家的元素?

4

2 回答 2

5

“同时不要失去与经纬度相关的城市和国家的元素”

当这些是属于一起的值时,为什么不将它们捆绑在一个对象中?IE:
struct Location {
    std::string city, country;
    double lng, lat;
};

一旦将所有位置加载到 中,std::vector<Location>您就可以定义自己的比较器并使用std::sort.

这个问题可能会对您有所帮助:如何将 std::sort 与结构向量和比较函数一起使用?

于 2013-10-09T19:14:28.130 回答
0

如果您创建一个将数据保存在一起的类或结构(而不​​是通过数组索引关联它们),您会发现管理起来要容易得多:

struct Details
{
    std::string city;
    std::string country;
    double latitude;
    double longitude;
};

struct csv_reader : std::ctype<char>
{
    csv_reader() : std::ctype<char>(get_table()) {}

    static std::ctype_base::mask const* get_table()
    {
        static std::vector<std::ctype_base::mask> rc(table_size, std::ctype_base::mask());
        rc[','] = std::ctype_base::space;
        rc['\n'] = std::ctype_base::space;
        return &rc[0];
    }
};

// in your program logic
std::ifstream fin("worldcities.csv");
std::vector<Details> vecDetails;
std::string line;
csv_reader reader;
while (std::getline(fin, line))
{
    std::istringstream iss(line);
    iss.imbue(std::locale(std::locale(), &csv_reader));
    Details d;
    iss >> d.city >> d.country >> d.latitude >> d.longitude;
    vecDetails.push_back(d);
}

// to sort by latitude
std::sort(vecDetails.begin(), vecDetails.end(), [](const Details& l, const Details& r)
{
    return l.latitude < r.latitude;
});
于 2013-10-09T19:27:03.570 回答