【发布时间】:2011-10-20 17:01:04
【问题描述】:
几天前我听说(也许我什至见过!)关于库,它有助于打包结构。不幸的是 - 我不记得它的名字了。
在我的程序中,我必须保留大量数据,因此我需要打包它们并避免在间隙上丢失位。例如:我必须保留 1...5 范围内的许多数字。如果我将它们保存在 char 中 - 它需要 8 位,但这个数字可以保存在 3 位上。此外 - 如果我将这些数字保存在 8 位的包中,最大数字为 256,我可以在那里打包 51 个数字(而不是 1 或 2!)。
是否有任何图书馆可以帮助执行此操作,还是我自己可以执行此操作?
【问题讨论】:
-
我认为您正在寻找位域。
-
需要维护秩序吗?如果没有,请查看 Radix-tree/Crit-bit 树。其中键是数字(1...5),值是所述数字的出现次数。这是网络路由器如何跟踪这么多 IP 地址的一种方法。
-
ASN.1 或 google protobuf 可能吗?根据您的需要,也许是 zlib。
-
大量数据有多大?您愿意花多少速度来减少应用程序的内存大小?
-
大约有10^8条记录,每条至少4B。我将不得不保留它两次(从不同的角度)。我想对每个数据进行线性访问。
标签: c++ performance data-structures