我正在处理Interval Partitioning问题(例如:http://kartikkukreja.wordpress.com/2013/09/26/interval-partitioning-problem/),我必须将最佳时间表写入输出文件。我目前正在使用地图>存储分配给多个分区的间隔。第一个int表示分区号,与之对应的向量表示分配给该分区的间隔。
要将内容写入文件,我将遍历地图的所有键并为每个键写出向量。这是存储数据的最有效数据结构(partition_number,interval)吗?或者我可以使用除地图之外的其他内容,以便以更快的方式编写输出吗?
答案 0 :(得分:0)
这在很大程度上取决于您要输出的内容。例如,用于解决此问题的更好的数据结构是std::forward_list<std::pair<int,int>>
,其中第一个int
将是时间,第二个int
将是当前所需分区的数量。
鉴于要求:
您的std::forward_list
将包含std::pair
s:
(时间,分区)
{0,1},
{1,2},
{3,3},
{4,1},
{5,2},
{6,1},
{7,0}
请记住,当您使用文件IO时,IO将成为成本的主要部分。所以在这一点上,这只是一个问题,你想要投入多少精力来倾销这些数据。如果打印这样的必需品是不够的,请告诉我,我可以勾选其他内容:
std::cout << "(time, partitions)" << std::endl;
for(auto i = partitions.begin(); i != partitions.end(); ++i){
std::cout << std::setw(5) << i->first << std::setw(1) << ',' << std::setw(12) << i->second << std::endl;
}