2014-10-08 30 views
0

我正在处理间隔分区问题(例如:http://kartikkukreja.wordpress.com/2013/09/26/interval-partitioning-problem/),我必须将最优计划写入输出文件。我目前使用地图>来存储分配给多个分区的时间间隔。第一个int表示分区号,对应的向量表示分配给该分区的时间间隔。C++中高效的输出数据结构

要将内容写出到一个文件中,我遍历地图的所有键并写出每个键的向量。这是存储数据的最有效的数据结构(partition_number,interval)吗?或者我可以使用地图以外的东西,以便能够以更快的方式编写输出结果?

+0

该文件中的数据结构不必与内存中的数据结构相匹配。例如,数据文件中的数据结构需要设计为易于阅读和快速解析/处理。数据文件还可能包含完整性支持的字段。 – 2014-10-08 23:57:57

+0

你多久写一次文件?你多久阅读一次?数据是大还是小? – 2014-10-08 23:59:02

+0

顺便说一句,指向内存中对象的指针不会转换为数据文件,因为您的程序可能不在同一位置,或者您的内存可能不在一次调用到另一次调用的同一位置。 – 2014-10-09 00:00:06

回答

0

这很大程度上取决于您试图输出的内容。例如,解决这个问题的更好的数据结构是std::forward_list<std::pair<int,int>>,其中第一个是int,第二个是当前需要的分区的数量。

鉴于请求:

enter image description here

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; 
}