Unordered_map 生成辅助密钥
Unordered_map produce secondary key
我使用字符串作为我的 unordered_map
的一种键,但我是否可以关联一个辅助唯一键,independent 来自主键,所以我可以用第二个键执行查找操作?
我在想密钥可能是内部哈希算法得出的哈希值。
我想在我保存的结构中包含一个 id(每次增加 1),但话又说回来,我必须先查找作为字符串的键。
这背后的原因:我想制作列表,以征用 unordered_map
中的一些元素,但是在列表中保存字符串而不是保存 int
或 long long
效率非常低. (我宁愿不使用指针,而是使用簿记风格的程序)。
您不能使用内部哈希算法得出的哈希值,因为它可能会因 table 大小增长而更改数字。这称为重新散列。也不能保证哈希值是唯一的(它们肯定不会)。
保留指向列表中元素的指针会工作得很好,因为 unordered_map
不会使指针无效。但是删除元素会比较麻烦
Boost 有 multi_index_container
,它提供了许多有用的类似数据库的功能。它将非常适合您的任务。
如果您不想使用 Boost,您可以使用 unordered_map
和唯一的整数索引,另一个 unordered_map
保留 string->index
对以通过字符串键进行搜索。删除也很困难,因为要么每次删除记录时检查所有列表,要么每次遍历列表时检查记录是否仍然存在。
我使用字符串作为我的 unordered_map
的一种键,但我是否可以关联一个辅助唯一键,independent 来自主键,所以我可以用第二个键执行查找操作?
我在想密钥可能是内部哈希算法得出的哈希值。
我想在我保存的结构中包含一个 id(每次增加 1),但话又说回来,我必须先查找作为字符串的键。
这背后的原因:我想制作列表,以征用 unordered_map
中的一些元素,但是在列表中保存字符串而不是保存 int
或 long long
效率非常低. (我宁愿不使用指针,而是使用簿记风格的程序)。
您不能使用内部哈希算法得出的哈希值,因为它可能会因 table 大小增长而更改数字。这称为重新散列。也不能保证哈希值是唯一的(它们肯定不会)。
保留指向列表中元素的指针会工作得很好,因为 unordered_map
不会使指针无效。但是删除元素会比较麻烦
Boost 有 multi_index_container
,它提供了许多有用的类似数据库的功能。它将非常适合您的任务。
如果您不想使用 Boost,您可以使用 unordered_map
和唯一的整数索引,另一个 unordered_map
保留 string->index
对以通过字符串键进行搜索。删除也很困难,因为要么每次删除记录时检查所有列表,要么每次遍历列表时检查记录是否仍然存在。