std::set_intersection 使用自定义比较器
std::set_intersection with custom comparator
我正在尝试理解 std::set_intersection
使用自定义比较器时的语法。
我正在尝试获取集合 one
和 two
的交集,这将导致集合 (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());
我正在尝试理解 std::set_intersection
使用自定义比较器时的语法。
我正在尝试获取集合 one
和 two
的交集,这将导致集合 (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());