set_intersection 方法在 unordered_set 上的 C++ 结果不一致并设置

C++ Inconsistent result by set_intersection method on unordered_set and set

当我遇到 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 的一些关键概念?

在第一个片段中只返回第一个相交范围,因为原始集合是未排序的

Constructs a sorted range beginning at d_first consisting of elements that are found in both sorted ranges [first1, last1) and [first2, last2). If some element is found m times in [first1, last1) and n times in [first2, last2), the first std::min(m, n) elements will be copied from the first range to the destination range.

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

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