我有4个字节的字符串。
每个字符串都是唯一的。
可以剪切每个字符串(只占用2个字节)并保留唯一的子字符串吗?怎么样?
我不需要超过2 ^ 16个字符串作为输出
答案 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++;
}
然后,您可以使用stringsToCodes
和codesToStrings
在两者之间进行转换。
如果您对字符串有更合理的方案,那么可能有更好的选择。此方法对存储字符串的方式变化很敏感,可能并不理想。