2015-02-07 52 views
0

这是一条线的形式我输入文件:值排序C++有很多值的地图数据结构的关键

人口|城市|州| 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> >。关键是人口,其余的是向量。欢迎任何建议。

+1

你可以证明你到目前为止? – 2015-02-07 05:35:55

+0

有很多方法。一个可能的方向:使用一个结构来保存你的'city','state'和'interstates';使用'map >'并且在载入所有数据后,使用'std :: sort(begin,end,sort_function)对每个'vector'进行排序' – tofi9 2015-02-07 05:38:55

+0

@taoufik感谢您的建议!有效。我能够使用函数对我的矢量进行排序。 – 2015-02-07 15:19:22

回答

0

我完全不会使用地图。你应该找出你实际需要的数据的每个元素的信息,并创建你需要的任何数据类型来支持它。例如。

struct State 
{ 
    unsigned int Population; 

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

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

然后可以分析你的数据,并创建一个std::vector<State>。使用std :: sort适当地对向量和数据进行排序(您可以使用lambdas,或者根据需要创建比较函数或函子)。

+0

是的。这只是我在这里发布的程序的一部分。我不得不使用地图。我能够通过使用状态的Struct来解决问题,并使用std :: sort和functor根据国家名称和城市名称对它们进行排序。感谢您的建议! – 2015-02-07 15:21:15