【问题标题】:Is there any generic vesion of HashTable?是否有任何通用版本的哈希表?
【发布时间】:2010-12-27 05:48:18
【问题描述】:

我需要一个可以像 C++ std::map 一样工作的类。更具体地说,我需要这样的行为:
map< string, vector<int> > my_map;
有可能吗?

【问题讨论】:

  • 你需要什么语言的?
  • @gf- 我相信他在为 C# 拍摄
  • 我相信你的意思是 std::multimap<:string>
  • @Kazar 请不要编辑问题,使其与您的特定答案相匹配。如果问题不明确,请要求澄清,同时不要发布答案!
  • @Neil 很公平,我不知道 stackoverflow 的规则。我只是试图匹配标签,因为其他人说它不够明显。

标签: c# c++ hashtable stdmap


【解决方案1】:

字典是我相信你想要的:

Dictionary<String, int> dict = new Dictionary<String, int>();

dict.Add("key", 0);
Console.WriteLine(dict["key"]);

等等等等

MSDN:http://msdn.microsoft.com/en-us/library/xfhwa508.aspx

您可以或多或少地指定任何类型作为键/值类型。包括另一个字典、数组或其他任何东西:

Dictionary<String, String[]> dict = new Dictionary<String, String[]>();

所以这里 Dictionary 中的每个元素都指向一个字符串数组。

要实现您所需要的(使用向量 int),您需要一个 List 作为值类型:

Dictionary<String, List<int>> dict = new Dictionary<String, List<int>>();

值得注意的是 Dictionary 没有预定义的顺序,而 std::map 有。如果 order 很重要,您可能希望使用 SortedDictionary 代替,它的用法几乎相同,但按 key 排序。一切都取决于您是否真的打算遍历字典。

但是请注意,如果您使用自己创建的类作为键,则需要正确覆盖 GetHashCode 和 Equals。

【讨论】:

    【解决方案2】:

    是的,您在问题中所写的声明是正确的。它将字符串映射到整数向量。但是, std::map 由红黑树实现支持,您的问题表明您需要一个哈希表。如果你可以使用 boost,你可以尝试他们的 unordered_map 实现。这是 tr1 规范的一部分,并将映射实现为哈希表。标准类型的哈希函数已经在 boost 中实现了,所以你不需要担心这个。

    #include <boost/unordered_map.hpp>
    ...
    boost::unordered_map<std::string, std::vector<int> > my_map;
    

    【讨论】:

    • 我认为这个问题要求的是 C# 等价物,而不是 C++ 代码是否准确
    • 我没有在问题中看到 c# 标签。您本可以更清楚地说明您在使用相当于 std::map 的 c#!
    • 我没有问这个问题,但我已经编辑了这个问题以澄清(假设我对这个问题的假设是正确的)。
    • 编辑一个问题来匹配你的答案不是好的做法——我已经把它回滚了。
    【解决方案3】:

    这取决于你真正需要什么。 正如已经说过的那样,您可以使用System.Collections.Generic.Dictionary&lt;Key, Value&gt; 获得查找行为,因此等效于std::map&lt;string, std::vector&lt;int&gt; &gt; 将是(使用System.Collections.Generic.List&lt;int&gt; 作为向量等效项):

    Dictionary<string, List<int>> myDictionary = new Dictionary<string, List<int>>();
    myDictionary.Add("a", new List<int>());
    

    等等 Dictionary 内部使用 Hashtable,而 std::map 使用红黑树,因此 std::map 是有序的,而 Dictionary 是无序的。如果您需要一个有序的字典(更接近于 std::map,您可以使用System.Collections.Generic.SortedDictionary&lt;Key, Value&gt;。用法与字典的用法基本相同

    【讨论】:

      【解决方案4】:

      如果您的目标是替换地图,那么您需要“SortedDictionary”,因为它也实现了红黑树。如果你想要一个哈希表,那么字典就可以了。

      【讨论】:

        猜你喜欢
        • 2015-11-27
        • 2013-07-18
        • 2012-12-19
        • 2014-12-28
        • 2021-11-08
        • 1970-01-01
        • 2016-10-29
        • 2015-01-08
        • 2011-04-16
        相关资源
        最近更新 更多