- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
This question建议使用 std::set_intersection
来查找两个数组的交集。使用 std::find
不是同样有效吗?
int a[5] = {1, 2, 3, 4, 5};
int b[5] = {3, 4, 5, 6, 7};
for (int i=0; i<5; i++)
{
if (std::find(b, b+5, a[i])!=b+5)
std::cout << a[i] << std::endl;
}
std::set_intersection
基本上做同样的事情吗?或者它可能使用更有效的算法?如果 std::find
花费 O(n) 时间,我认为上面的复杂度是 O(n^2)。
最佳答案
对于所有(或至少几乎所有)标准库复杂性问题,a good reference可以为您解答。
特别是我们得到了 std::find
执行 At most last - first applications of the predicate
(在本例中为 operator<
)第一个和最后一个定义要搜索的范围。
我们也得到了 std::set_intersection
执行 At most 2·(N1+N2-1) comparisons, where N1 = std::distance(first1, last1) and N2 = std::distance(first2, last2)
.
这意味着您的循环最多执行 N1 * N2
operator<
的应用,在本例中为 25。std::set_intersection
最多使用 18 个。
因此,这两种方法在给出相同答案的意义上“同样有效”,但是 std::set_intersection
这样做需要更少的比较。
关于c++ - 使用 for 循环并查找而不是 set_intersection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26197959/
我认为此处描述的 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 实例之间的所有共同元素。在我的特定情况下,我只对检查两个集合是否有任何共同元素感兴趣。 我目
我是一名优秀的程序员,十分优秀!