提问人:Lukáš Kužel 提问时间:11/11/2023 更新时间:11/11/2023 访问量:62
从多个字符串中,有效地构建具有跨度的单个缓冲区
From multiple strings, efficiently build single buffer with spans to it
问:
我正在尝试找到一种体面的算法来有效地创建不可变的字符串缓冲区。 我有一个字符串值数组,我希望将它们转换为指向单个缓冲区的string_view。
我可以通过简单地将输入字符串附加到单个字符串中来做到这一点,但我希望通过排列尽可能少重复子字符串的输入字符串来使结果字符串尽可能小。
下面是一个实际的例子:
inputs:
settings
array
node_data
raycast
dataset
ray
output buffer:
arraycastnode_datasettings
output_spans:
....................settings
..array.....................
...........node_data........
....raycast.................
................dataset.....
....ray.....................
为了可视化,缩进output_spans以显示它们在主缓冲区中的起始位置。根据设计,输出值必须与输入完全相同。
下面是一个 C++ 示例:
std::vector<std::string> inputs{"settings","array","node_data","raycast","dataset","ray"};
std::vector<std::string_view> outputs;
// mainBuffer will be: arraycastnode_datasettings
std::string mainBuffer = CompressStrings(std::move(inputs), outputs);
有人知道算法名称或更好的是实现这一点的库吗? 这似乎是相当简单的压缩,我敢肯定 60 年代的某个人已经写过一些关于这个的东西。
答: 暂无答案
下一个:如何提取压缩包?
评论