【问题标题】:Sorting values C++ map data structure with many values for a key对值进行排序 C++ 映射具有多个键值的数据结构
【发布时间】:2015-04-07 08:41:49
【问题描述】:

这是我输入文件的一行格式:

人口|城市|州|ListOfHighways ==>

6|Oklahoma City|Oklahoma|I-35;I-44;I-40 6|Boston|Massachusetts|I-90;I-93 8|Columbus|Ohio|I-70;I-71

我需要创建一个具有以下格式的输出文件:

Population (newline) City, State Interstates: Comma-separated list of interstates, sorted by interstate number ascending (newline)

==> 示例:

6

Boston, Massachusetts
Interstates: I-90, I-93

Oklahoma City, Oklahoma
Interstates: I-35, I-40, I-44

8

Columbus, Ohio
Interstates: I-70, I-71

在这里,具有相同人口的州应该被分组在一起,并且必须先按州的字母顺序排序,然后再按城市排序。我能够获得正确的格式,但我无法弄清楚使用哪种数据结构对州和城市进行排序。

我现在有map<int, vector<string> >。关键是人口,其余的是向量。欢迎提出任何建议。

【问题讨论】:

  • 你能展示你目前拥有的东西吗?
  • 方法有很多。一种可能的方法:使用结构将citystateinterstates 保持在一起;使用 map<int,vector<my_struct>> 并在加载所有数据后,使用 std::sort(begin,end,sort_function) 对每个 vector 进行排序
  • @taoufik 谢谢你的建议!有效。我能够使用仿函数对我的向量进行排序。

标签: c++ sorting dictionary key-value


【解决方案1】:

我根本不会为此使用地图。您可能应该弄清楚数据的每个元素实际需要哪些信息,并创建支持该信息所需的任何数据类型。例如

struct State
{
    unsigned int Population;

    std::vector<std::string> Cities;

    std::vector<unsigned int> Highways;
};

然后您可以解析您的数据,并创建一个std::vector&lt;State&gt;。使用 std::sort 对向量和数据进行适当的排序(您可以使用 lambda,或在必要时创建比较函数或仿函数)。

【讨论】:

  • 是的。这只是我在这里发布的程序的一部分。我不得不使用地图。我能够通过使用州结构来解决这个问题,并使用 std::sort 和仿函数根据州名称和城市名称对它们进行排序。谢谢你的建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-28
  • 2015-07-17
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
相关资源
最近更新 更多