【问题标题】:How to store mapping of strings in C efficiently?如何有效地在 C 中存储字符串的映射?
【发布时间】:2012-06-03 01:13:12
【问题描述】:
For example if i have to store many entries like in C
hash["1"]="11"
hash["2"]="12"
hash["11"]="21"

条件是:你只寻找连续相同的数字,所以只保留那些在地图中。

就像这些用于解决问题的许多条目一样。我们可以使用一些技术,例如将 ASCII 值的总和相加来找到索引,然后使用一些 mod 函数。

但是这种方法并不能保证不会发生碰撞,即使发生了一次碰撞,整个问题也会出错。

这可以用 C++ 轻松完成吗?

请提供一些建议/提示。 提前致谢

【问题讨论】:

  • 我完全不明白你的问题。你能澄清一下吗?另外:这是作业吗?最后是 C 风格还是 C++ 字符串?
  • 如何在 C 中高效地存储字符串的哈希值?
  • 如果是 C 题,为什么要标记为 C++?您确实意识到 C 和 C++ 是两种截然不同的语言?
  • 我想问一下,与 C 相比,它是否可以在 C++ 中轻松实现。

标签: c++ c string hash


【解决方案1】:

关于散列函数:没有散列函数可以保证不会发生冲突。他们只能尽量减少典型工作负载中发生冲突的机会。一种经常使用的散列函数是伯恩斯坦散列函数。可以找到不同字符串哈希函数的比较(包括bernstein)here

在 C++ 中,您可以简单地使用标准 map(参见 here)模板,该模板不使用哈希映射,但通常使用红黑树实现。 C++11 标准有一个unordered_map(参见here),它是使用散列函数实现的。

【讨论】:

    猜你喜欢
    • 2011-04-30
    • 1970-01-01
    • 2019-07-27
    • 2012-11-23
    • 1970-01-01
    • 2012-01-18
    • 2011-07-24
    • 2010-09-17
    • 1970-01-01
    相关资源
    最近更新 更多