- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要获取两个 vector 之间的交集列表。在我的例子中, vector 是用户类型的 vector 。所以为了获得封装的数字,我必须使用比较器函数。
我还希望能够获得与偏移量的交集。例如,给定两个 vector {1,2,3,4,6,8} 和 {5, 7, 9,10} 。由于 3 + 2 = 5 和 8 + 2 = 10,与偏移集 2 的交集是 { 3,8 }。
我想下面的代码应该可以工作,但我得到的是 {3,8} {3,6,8} 。我不知道如何使用 std::set_intersection 的比较器函数。我错过了什么?
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
struct A
{
A ( int in ) { a = in; }
int getNumber() { return a; }
bool operator< ( A rhs )
{
return this->a < rhs.a;
}
int a;
};
int main()
{
std::vector<A> v1{1,2,3,4,6,8};
std::vector<A> v2{5, 7, 9,10};
int offSet = 2;
auto lessThanWithOffset = [offSet]( A lhs, A rhs)
{
return lhs.getNumber() + offSet < rhs.getNumber();
};
std::sort(v1.begin(), v1.end());
std::sort(v2.begin(), v2.end());
std::vector<A> v_intersection;
std::set_intersection(v1.begin(), v1.end(),
v2.begin(), v2.end(),
std::back_inserter(v_intersection), lessThanWithOffset);
for(auto n : v_intersection)
std::cout << n.getNumber() << ' ';
}
最佳答案
参见 this , 因为
The type
T
satisfiesCompare
if
- The type
T
satisfiesBinaryPredicate
, andGiven
comp
, an object of typeCompare
equiv(a, b)
, an expression equivalent to!comp(a, b) && !comp(b, a)
The following expressions must be valid and have their specified effects
For all
a
,comp(a,a)==false
If
comp(a,b)==true
thencomp(b,a)==false
if
comp(a,b)==true
andcomp(b,c)==true
thencomp(a,c)==true
For all
a
,equiv(a,a)==true
If
equiv(a,b)==true
, thenequiv(b,a)==true
If
equiv(a,b)==true
andequiv(b,c)==true
, thenequiv(a,c)==true
所以 equiv(A(6), A(7)) == true
因为!((6+2) < 7) && !((7+2) < 6)
实际上,您的 lessThanWithOffset
不符合标准,因为 equiv(A(6), A(8)) == true
和 equiv(A(8), A(10)) == true
,但是equiv(A(6), A(10)) == false
关于c++ - std::set_intersection,带偏移量的交集列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34488706/
我认为此处描述的 set_intersection STL 函数:http://www.cplusplus.com/reference/algorithm/set_intersection/在数学意义
使用 中的功能时, 通常有一个额外的参数来自定义比较。但是我不太明白关于参数的描述(Documentation of set_intersection)。 Binary function that
有什么方法可以对两种不同类型的集合执行 std::set_intersection 吗? 我有两套: std::set l_set1; std::set l_set2; 我可以为它们定义一些比较器来检
这个问题在这里已经有了答案: std::back_inserter for a std::set? (2 个答案) 关闭 2 年前。 是否可以将 std::set_intersection 或其他
我正在编写一个代码,根据对象的 ID 将两个对象 vector 相交。我收到运行时错误。我试图找出问题所在,但不知道为什么?你能帮我吗? #include #include #include u
struct Cord { int x_cord; int y_cord; Cord(int x = 0,int y = 0):x_cord(x
我想找到两张 map 之间的交点。我的 map 有结构 map , 其中line是一个结构。问题是当我使用 set_intersection为了执行交集,我得到了图像中表示的以下错误。 下面是我的代码
我需要获取两个 vector 之间的交集列表。在我的例子中, vector 是用户类型的 vector 。所以为了获得封装的数字,我必须使用比较器函数。 我还希望能够获得与偏移量的交集。例如,给定两个
我正在阅读有关 set_intersection 的内容,它似乎期望用户提前分配正确数量的空间(或更多),但这不是很奇怪吗?在 C++ 中,您经常使用 std::vector 动态分配空间。为什么 s
std::set m{1,2, 4}; std::set n{2,3, 4}; std::set mn; std::set::iterator it; it=set_intersection(m.be
This question建议使用 std::set_intersection 来查找两个数组的交集。使用 std::find 不是同样有效吗? int a[5] = {1, 2, 3, 4, 5};
我有一个类有两个属性: set ens1_; set ens2_; 现在,我有一个方法可以找到这两个集合之间的交集。这是我在我的方法中写的: set ens; set::iterator it;
我想知道如何 thrust::set_intersection有效,但从我的测试结果来看,我对这个函数的作用更加困惑。 举几个例子: const int size1 = 5; const int si
我有一个简单的要求,我需要从另一个 vector 中的字符串主列表中找到一个 vector 中字符串的出现。一开始我可以很容易地做到这一点: vector custom_list; set maste
我在尝试理解使用自定义比较器时 std::set_intersection 的语法。我正在尝试获取集合 one 和 two 的交集,这将导致集合 (intersect) 仅包含元素 f2. 我得到错误
我知道这些命令适用于两组。 是否有任何简单快速的方法可以为超过两组的情况执行此操作。 我想我可以为此使用某种循环,但也许有更好的方法。 谢谢 最佳答案 对于集合并集,如果要查看 M 个集合中哪个集合的
大家好:)我想创建一个个人集合类并重载运算符/=,就我的类而言,该运算符应该用于获取两个集合的插值。我收到以下错误: 错误:分配只读位置 '__result.std::_Rb_tree_const_i
下面代码的复杂度是多少? set S1, S2, ans; set_intersection(S1.begin(), S1.end(), S2.begin(), S2.end(), inserter(
我想知道标准库中是否有任何工具可以同时计算两个排序范围之间的交集和差集。带有以下签名的东西: template Output3 decompose_sets (Input1 first1, Inpu
std::set_intersection允许我通过将元素输出到 输出迭代器 来检索两个 std::set 实例之间的所有共同元素。在我的特定情况下,我只对检查两个集合是否有任何共同元素感兴趣。 我目
我是一名优秀的程序员,十分优秀!