std::set_intersection 使用自定义比较器

std::set_intersection with custom comparator

我正在尝试理解 std::set_intersection 使用自定义比较器时的语法。 我正在尝试获取集合 onetwo 的交集,这将导致集合 (intersect) 仅包含元素 f2.

我收到错误:

passing ‘const Foo’ as ‘this’ argument discards qualifiers

#include <set>
#include <string>

struct Foo
{
    std::string str;
};

struct Compare_custom
{
    bool operator () (const Foo & lhs, const Foo & rhs)
    {
        return (lhs.str.size() > rhs.str.size());
    }
};

int main ()
{
    std::set<Foo, Compare_custom> one, two, intersect;

    Foo f1, f2, f3;

    f1.str = "-";
    f2.str = "--";
    f3.str = "---";

    one.insert(f1);
    one.insert(f2);

    two.insert(f2);
    two.insert(f3);

    std::set_intersection(one.begin(), one.end(),
        two.begin(), two.end(),
        intersect.begin(), Compare_custom());
}

我做错了什么?

您将 std::set_intersection 错误地用于 std::set。试试这个:

std::set_intersection(one.begin(), one.end(),
        two.begin(), two.end(),
        std::inserter(intersect, intersect.begin()), Compare_custom());