在set和map键之间找到set_difference

gla*_*kou 2 c++ map set set-difference

我想问一下是否可以提供一个示例,说明如何使用set_difference找到地图的集合和键之间的差异

我知道另一个问题std :: set_difference是否可以比较set和map Keys?但它指出另一个没有明确例子的问题.我需要一个不使用boost库的解决方案

#include <algorithm>
#include <set>
#include <iterator>
// ...
std::set<int> s1, s2;
// Fill in s1 and s2 with values
std::set<int> result;
std::set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(),
    std::inserter(result, result.end()));
Run Code Online (Sandbox Code Playgroud)

jro*_*rok 7

您可以使用自定义比较器来完成.标准算法使用严格的弱排序.为了测试两个元素的相等性,比较器需要应用两次.两个元素相等时都comp(first, second)comp(second, first)返回false(其中comp是比较器功能).由于您要比较的元素具有不同的类型,因此一个比较器不会 - 您需要两个重载:

struct cmp {
    bool operator()(int i, const std::pair<int, double>& p) const
    {
        return i < p.first;
    }

    bool operator()(const std::pair<int, double>& p, int i) const
    {
        return p.first < i;
    }

};

int main()
{

    std::set<int> s1 { 1, 2, 3, 4 };
    std::map<int, double> s2 { {1, 0}, {2,0}, {4,0} };

    std::set<int> result;

    std::set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(),
        std::inserter(result, result.end()), cmp());

    std::cout << *result.begin(); // will print 3

}
Run Code Online (Sandbox Code Playgroud)

  • @salamis很确定你可以自己解决这个问题(c: (3认同)