std :: set_intersection for sets custom compare functor

时间:2018-04-14 06:22:57

标签: c++ set-intersection

我试图在不暗示比较时理解std::set_intersection的语法。 在这个例子中,我试图得到一个和两个的交集,这应该导致一个包含y的集合。 我的尝试不会编译,这是错误:

  

将'const Example'作为'this'参数传递会丢弃限定符

这是代码:

using namespace std;

struct Example
{
    string a;
};

struct Compare_custom
{
    bool operator () (const Example & first, const Example & second)
    {

        if(first.a.size() > second.a.size())
            return true;
        else
            return false;
    }
};

int main(void)
{
    set<Example, Compare_custom> one;
    set<Example, Compare_custom> two;

    Example x, y, z;

    x.a = "1";
    y.a = "12";
    z.a = "123";

    one.insert(x);
    one.insert(y);

    two.insert(y);
    two.insert(z);

    set<Example, Compare_custom> intersect;

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

    return 0;
}

我做错了什么?

1 个答案:

答案 0 :(得分:2)

std::set_intersection错误地使用std::set。试试这个:

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