【问题标题】:Unordered_set insertion worst caseUnordered_set 插入最坏情况
【发布时间】:2015-08-22 17:26:10
【问题描述】:

我有一个关于在 unordered_set 中插入的问题。我想建立一个最坏情况插入的例子。我有 30000 个字符串(len string

【问题讨论】:

  • 要构建最坏情况插入示例,您必须了解散列函数。
  • @101010 我明白了,但是解决这个问题的其他变体是什么。
  • 托尼回答了你的问题。另一种有点不正统的方法是使用std::unordered_set::hash_function 并生成具有相同哈希值的测试集。
  • @101010 我也明白,我也尝试过构建最坏的情况,使用 unordered_set::hash_function,并且对于所有长度
  • 看看 STL 程序员有多好 :P。按照托尼的回答。

标签: c++ hash unordered-set


【解决方案1】:

std::hash 的实现各不相同——标准允许编译器供应商做他们认为合理的任何事情。因此,通过在实例化 unordered_set 时指定自己的哈希例程,最容易获得最坏情况的行为:它可以为所有输入值返回相同的值(例如 0)。

struct Hash
{
    size_t operator()(const std::string&) const { return 0; }
};

std::unordered_set<string, Hash> my_set;

【讨论】:

  • 我应该使用默认的 unordered_set::hash_function,而且我必须构建测试,而不是 hash_foo,这给了我最坏的情况。
  • @thmw:那么你最好研究一下你的标准库std::hash&lt;std::string&gt; 实现......祝你好运 - 这可能非常棘手!
  • 你能给我 STL 实现的链接,或者我在哪里可以找到它?泰
  • @thmw 只需echo "#include &lt;unordered_set&gt;" &gt; x.cpp 然后调用你的编译器,不管它的预处理参数是什么......例如对于 GCC g++ -E x.cpp,对于 VC++ cl /E x.cpp - 将输出重定向到 lessmore 或文件并使用您选择的编辑器。您将在其中看到哈希实现。
猜你喜欢
  • 1970-01-01
  • 2018-10-23
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多