在我的项目中,我使用 ASCII 7 位的大量短字符串,并且必须以最高性能处理(存储、比较、搜索等)这些字符串。基本上,我构建了一些 uint64_t 类型的索引数组,每个元素存储一个单词的 9 个字符,并将该索引用作任何字符串比较操作的数字元素。当前的实现工作得很快,但如果你愿意的话,也许可以稍微改进一下。
此函数将最多 9 个初始字符转换为 uint64_t 值 - 该数字的任何比较都等效于标准“strcmp”函数。
#include <cstdint>
#include <iostream>
uint64_t cnv(const char* str, size_t len)
{
uint64_t res = 0;
switch (len)
{
default:
case 9: res = str[8];
case 8: res |= uint64_t(str[7]) << 7;
case 7: res |= uint64_t(str[6]) << 14;
case 6: res |= uint64_t(str[5]) << 21;
case 5: res |= uint64_t(str[4]) << 28;
case 4: res |= uint64_t(str[3]) << 35;
case 3: res |= uint64_t(str[2]) << 42;
case 2: res |= uint64_t(str[1]) << 49;
case 1: res |= uint64_t(str[0]) << 56;
case 0: break;
}
return res;
}
int main()
{
uint64_t v0 = cnv("000", 3);
uint64_t v1 = cnv("0000000", 7);
std::cout << (v1 < v0);
}