【问题标题】:Set difference of two character sets C++设置两个字符集C ++的差异
【发布时间】:2019-03-17 05:49:08
【问题描述】:

问题

我有两个排序集:

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()));

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

尝试 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>’})

我该如何解决这个问题?

【问题讨论】:

    标签: c++ stl set


    【解决方案1】:

    您需要将greater&lt;char&gt;() 比较器传递给set_difference,与您用于集合的比较器相同(请参阅full 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.

    【讨论】:

      猜你喜欢
      • 2019-10-09
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 2011-02-13
      • 2020-05-01
      相关资源
      最近更新 更多