set_intersection 方法在 unordered_set 上的 C++ 结果不一致并设置
C++ Inconsistent result by set_intersection method on unordered_set and set
当我遇到 unordered_set
和 set
的不一致时,我正在处理 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} 相等并且 set
s 是排序的范围。因此,对于给定的范围,这两个结果都是正确的。
当我遇到 unordered_set
和 set
的不一致时,我正在处理 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} 相等并且 set
s 是排序的范围。因此,对于给定的范围,这两个结果都是正确的。