如何使独特的字符串更短并保持独特性

时间:2018-06-10 12:18:07

标签: c++ linux random

我有4个字节的字符串。

每个字符串都是唯一的。

可以剪切每个字符串(只占用2个字节)并保留唯一的子字符串吗?怎么样?

我不需要超过2 ^ 16个字符串作为输出

1 个答案:

答案 0 :(得分:0)

快速而肮脏的方法是将字符串映射为单调增加的标识符或代码

// std::uint16_t is a 2-byte integral type
std::map<String, std::uint16_t> stringsToCodes;
std::map<std::uint16_t, String> codesToStrings;
std::uint16_t counter = 0;
for (auto& str : all_your_strings) {
  stringsToCodes[str] = counter;
  codesToStrings[counter] = str;
  counter++;
}

然后,您可以使用stringsToCodescodesToStrings在两者之间进行转换。

如果您对字符串有更合理的方案,那么可能有更好的选择。此方法对存储字符串的方式变化很敏感,可能并不理想。