存储数据结构c++

Store data structure c++

本文关键字:c++ 数据结构 存储      更新时间:2023-10-16

我有很多数据(7k行)以这种方式存储:

#include <vector>
#include <deque>
std::deque<std::deque<std::vector<unsigned char>>> data =
{
  {{0}},
  {{1,0},
   {0,1}},
  {{1,1,0,0},
   {0,1,1,0},
   {1,0,0,1},
   {0,1,0,1},
   {0,0,1,1}},
  {{1,1,1,0,0,0},
   {0,1,1,1,0,0},
   {1,0,1,0,1,0},
   {0,1,1,0,1,0},
   ...
  {0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1}}
};

这使我的代码运行得更快,因为我可以跳过某些部分。向量的长度不需要是可变的,但这只是一种简单的方法。问题是,现在编译只需要几分钟,而不是几秒钟。

有没有更好的方法来存储这些数据?还是应该在运行时加载?

如果它是在运行时加载的,难道不需要时间吗?

查看编译器是否支持预编译的头,如果支持,请将此数据作为PCH的一部分。这将导致只有当数据实际更改时才会发生缓慢的工作,并将其与所有其他代码更改分开。

如果由于某种原因PCH不是一个选项,您也可以创建一个extern是您的std::vector的头,并有一个包含约7k行元素的.cpp文件。如果文件未修改,大多数编译器不会重新编译单个单元。

您应该从思考您试图实现的目标开始。你担心你的程序会让用户感觉迟钝吗?

从硬盘加载7kB的数据将比任何人都能注意到的更快。我的猜测是,它几乎可以用于任何目的。如果数据可以在中编译,那么它必须是常量,这意味着无论如何都只需要加载一次。即使是具有严格截止日期的安全关键系统,在程序初始化期间通常也能提供几毫秒的时间。

在不太可能的情况下,这甚至很重要,你应该衡量时间它需要加载数据,看看它是否符合您的目的。