两个字符集C 的差异

Set difference of two character sets C++

本文关键字:字符集 两个      更新时间:2023-10-16

问题

我有两个排序的集:

set<char, greater<char> > alp1;
set<char, greater<char> > alp;

我需要找到集合差异: alp-alp1

尝试1

set_difference(alp.begin(), alp.end(), alp1.begin(), alp1.end(), inserter(diff1, diff1.end()));

但是,仅从alp中减去alp1的第一个元素。

尝试2

itr = set_difference(alp.begin(), alp.end(), alp1.begin(), alp1.end(), diff1.begin());
for(auto it=diff.begin(); it<itr; it++)
   cout<<*it;

尝试2错误:

no match for ‘operator<’ (operand types are ‘std::_Rb_tree_const_iterator<char>’ and ‘std::set<char>::const_iterator’ {aka ‘std::_Rb_tree_const_iterator<char>’})

如何解决此问题?

您需要将greater<char>()比较器传递给set_difference,与您用于集合的比较器相同(请参阅完整API):

#include <algorithm>
#include <iostream>
#include <set>
using namespace std;
int main() {
  set<char, greater<char>> alp = {'a', 'b', 'c', 'd', 'e'};
  set<char, greater<char>> alp1 = {'a', 'b', 'c'};
  set<char, greater<char>> diff;
  set_difference(alp.begin(), alp.end(), alp1.begin(), alp1.end(),
                 inserter(diff, diff.begin()), greater<char>());
  for (const char c : diff) {
    cout << c;
  }
  return 0;
}

输出:

ed

演示:http://cpp.sh/3be2u。