【问题标题】:How can I find the intersection of two arrays using Hash functions in C++?如何在 C++ 中使用哈希函数找到两个数组的交集?
【发布时间】:2011-03-11 04:03:44
【问题描述】:

我是哈希新手,不知道如何在 C++ 中执行此操作。在java中,我们有Hash的ContainsKey、put、get等函数。 C ++中有类似的东西吗? 谢谢。

【问题讨论】:

    标签: c++ hash hashtable


    【解决方案1】:

    您可以从std::set<> 开始,它是一棵平衡二叉树。最近的编译器还提供unordered_set<>,它是一个哈希表,但不是 C++03 的一部分:它将是 C++0x 的一部分。 boost 库也有一个哈希集实现。

    对于std::set,见http://www.cplusplus.com/reference/stl/set/

    例如

    std::set<int> s;
    for (int i = 0; i < first_vector.size(); ++i)
        s.insert(first_vector[i]);
    for (int i = 0; i < second_vector.size(); ++i)
        if (s.find(second_vector[i]) != s.end())
            do_something();
    

    【讨论】:

    • 交集是对集合的操作,而不是对字典的操作。
    • @Ben:是的——意识到当我去提供一个示例实现时...... :-)
    【解决方案2】:

    您可能想要unordered_set 类。它是 TR1 的一部分并在 C++0x 中标准化,较旧的编译器可以在 boost 库中找到实现。

    【讨论】:

      【解决方案3】:

      使用std::map,你可以在java中做类似HashMap的事情

      【讨论】:

      • std::map 不是哈希表。此外,交集是对集合的操作,而不是对字典的操作。
      • @Ben 我同意 std::map 不是哈希表。但是仍然可以在字典上执行交集,因为字典中的键是唯一标识的。如有错误请指正。
      • 是的,您可以对字典键集进行交集并忽略值....但是为什么要为存储您不打算使用的值支付额外费用?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多