标准::set_intersection 带自定义比较器



我试图理解使用自定义比较器时std::set_intersection语法。我试图获取集合onetwo的交集,这应该导致一个集合(intersect(只包含元素f2

我收到错误:

将"const Foo"作为"this"参数传递会丢弃限定符

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

最新更新