我的目标是进行字符串实习。为此,我正在寻找一个可以执行以下操作的散列容器类:
- 每个节点只分配一块内存
- 每个节点不同的用户数据大小
值类型如下所示:
struct String
{
size_t refcnt;
size_t len;
char data[];
};
每个 String 对象都有不同的大小。这将通过 operator new + Placement new 来完成。所以基本上我想自己分配Node,稍后再推入容器中。
以下容器不适合:
- std::unordored_set
boost::multi_index::*
无法分配不同大小的节点
boost::intrusive::unordered_set
一开始似乎有效。但有一些缺点。首先,您必须自己分配存储桶数组并维护负载因子。这只是不必要且容易出错。
但另一个问题更难解决:您只能搜索具有 String 类型的对象。但是每次查找条目时分配一个字符串效率低下,并且您只有一个 std::string 作为输入。
是否有任何其他散列容器可用于此任务?