C ++中的静态地图

时间:2018-12-28 18:29:30

标签: c++

我正在优化代码,以创建成千上万种类型的地图

std::unordered_map<std::wstring, std::wstring>

可能的密钥数量约为20个,它们在编译时都是已知的。

我的想法是可能拥有一些具有最小内存占用的专用容器,但最好是具有类似C ++标准的接口。

另一个想法是使用std :: tuple之类的东西,但索引类型为 char * 。可能这是一个奇怪的想法,我还没有想到它的实现,并且我不确定它是否可以实现,但是从理论上讲可以实现

std::static_map<"key1", "key2", ... > m;
m<"key1"> = "value1";
std::string val = m<"key1">;

从理论上讲,可以有一个使用consexpr哈希函数的实现。

EDIT1:这是一种数据处理软件,可通过UDP协议收集日志(或消息)。收到消息后,将创建一个包含此映射以及其他数据的MSG结构。然后,将MSG添加到处理队列中,然后将进一步的处理添加到其他队列中,依此类推。...如果处理缓慢,则队列中可能有成千上万的MSG。

1 个答案:

答案 0 :(得分:0)

您的代码创建并填充了许多地图和wstrings,这意味着需要进行大量分配。

分配工作的第一个减少可以是创建已经有固定数量的存储桶(20?)的unordered_map

但是考虑到在编译时已知的键数量很少,我建议在键字符串到0和已知最大键数量之间的整数之间进行映射。然后,您可以将unordered_map替换为vector(也以固定大小创建),并避免使用散列来直接访问任何给定字段。

根据密钥字符串的长度,您也许可以使用trie来解析输入消息中的密钥字符串。