【问题标题】:Efficient output data structure in C++C++ 中的高效输出数据结构
【发布时间】:2014-10-08 22:39:41
【问题描述】:

我正在研究间隔分区问题(例如:http://kartikkukreja.wordpress.com/2013/09/26/interval-partitioning-problem/),我必须将最佳计划写入输出文件。我目前正在使用 map> 来存储分配给多个分区的间隔。第一个 int 表示分区号,与其对应的向量表示分配给该分区的间隔。

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

【问题讨论】:

  • 文件中的数据结构不必与内存中的数据结构相匹配。例如,数据文件中的数据结构希望设计为易于阅读和快速解析/处理。数据文件还可能包含完整性支持字段。
  • 您多久写入一次文件?你多久读一次?数据是大还是小?
  • 顺便说一句,指向内存中对象的指针不会转换为数据文件,因为您的程序可能不在同一位置,或者您的内存在一次调用到另一次调用时可能不在同一位置。
  • 写入文件是否有时间限制?从文件中读取?

标签: c++ data-structures map stl


【解决方案1】:

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

鉴于请求:

您的std::forward_list 将包含std::pairs:

(时间,分区)
{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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多