【问题标题】:C++ set_difference method not working as expectedC++ set_difference 方法未按预期工作
【发布时间】:2025-11-22 20:40:02
【问题描述】:

我正在尝试找出这两组 {1,2,3,4,5,6} 和 {1, 3, 6, 4, 1, 2} 。 missing 向量应该只包含 {5} 但它包含 {2,4,5} 。我在这里做错了什么?

#include <set>
#include <vector>
#include <iostream>
using namespace std;
int solution(vector<int> &A) {
    vector<int> missing;
    vector<int> range(A.size());
    for(int i=1; i<= A.size(); i++) range[i-1] = i;

    set_difference(range.begin(), range.end(), A.begin(), A.end(), std::inserter(missing, missing.end()));
    return missing[0]; // Missing contains 2,4,5 where as it should had contain just 5
}

int main(){
    vector<int> A = {1, 3, 6, 4, 1, 2};
    cout << solution(A);
   return 0;
}

【问题讨论】:

  • set_difference 需要排序范围作为输入。 {1, 3, 6, 4, 1, 2} 未排序(至少不符合默认比较器)。

标签: c++ stl set-difference


【解决方案1】:

std::inserter 方法的第二个参数应该是 missing.begin() 而不是 missing.end()

std::sort(A.begin(),A.end());

set_difference(range.begin(), range.end(), A.begin(), A.end(), std::inserter(missing, missing.begin()));

【讨论】:

  • 那时missing.begin() == missing.end()A 解决了这个问题
  • 是的,missing.begin() 更改并不能解决它,只有排序才能解决。
  • 如果你仔细观察我的回复,我也添加了排序语句。
最近更新 更多