【问题标题】:C++ Inconsistent result by set_intersection method on unordered_set and set [duplicate]C ++ set_intersection 方法在 unordered_set 和 set 上的结果不一致 [重复]
【发布时间】:2020-09-06 09:37:01
【问题描述】:

当我遇到 unordered_setset 不一致时,我正在解决 Leetcode 上的一个问题。 设两个向量为nums1 = [4,9,5]nums2 = [9,4,9,8,4]。我们必须找到他们的交点,所以我做了以下两件事:

1.

unordered_set<int> s1 (nums1.begin(), nums1.end());
unordered_set<int> s2 (nums2.begin(), nums2.end());
vector <int> s;
set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), back_inserter(s));

2。将unordered_set 替换为set

set<int> s1 (nums1.begin(), nums1.end());
set<int> s2 (nums2.begin(), nums2.end());
vector <int> s;
set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), back_inserter(s));

方法 1. 的结果是 [9],而方法 2. 的结果是 [9,4](这是正确的)。我是否遗漏了 C++ STL 的一些关键概念?

【问题讨论】:

标签: c++ vector set intersection unordered-set


【解决方案1】:

在第一次剪断时,只返回第一个相交范围,因为原始集合是未排序的

构造一个从 d_first 开始的由元素组成的排序范围 在 sorted 范围 [first1, last1) 和 [first2, 最后2)。如果在 [first1, last1) 和 n 中找到某个元素 m 次 在 [first2, last2) 中的时间,first std::min(m, n) 元素将是 从第一个范围复制到目标范围。

第一个排序范围是 {4,9},第二个排序范围是 {9}。 这两者的交集确实是 {9}。

对于set,{4,9} 和 {9,4} 相等,sets 是排序范围。因此,对于给定的范围,这两个结果都是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多