Unordered_map生成辅助密钥

时间:2017-06-09 18:39:11

标签: c++ c++11 unordered-map

我正在使用字符串作为unordered_map的一种键,但我是否可以将辅助唯一键独立与主要键相关联,因此我可以执行用第二个键找到操作?

我当时认为密钥可能是内部哈希算法提出的哈希值。

我想在我正在保存的结构中包含一个id(每次增加1),但是再次,我必须首先查找字符串的键。

背后的原因:我想制作列出unordered_map中的一些元素的列表,但列表中的保存字符串效率非常低,而不是保存intlong long。 (我宁愿不使用指针,而是使用记账方式)。

1 个答案:

答案 0 :(得分:2)

您无法使用内部哈希算法提出的哈希值,因为它可能会因表大小增加而更改数字。这称为rehashing。哈希也不保证是唯一的(它们肯定不会)。

保持指向列表中元素的指针可以正常工作,因为unordered_map不会使指针无效。但删除元素将很难。

Boost有multi_index_container,它提供了许多有用的类似数据库的功能。它将非常适合您的任务。

如果您不想使用Boost,可以将unordered_map与唯一整数索引一起使用,并使用另一个unordered_map来保留string->index对,以便按字符串键进行搜索。删除也很难,因为每次删除记录时都会检查所有列表,或者每次遍历列表时都会检查记录是否仍然存在。