在两个列表中匹配元素算法
match elements algorithm in two lists C++
我正在考虑一种方法来改变两个循环的顺序下面是两个列表:
list<element> aList1;
list<element> aList2;
我想检查两个列表中的每个元素,以确保aList1中的元素是否等于aList2中的元素。
列表中的内容可以是:
<a,b,c,d> aList1
<k,a,b,z> aList2
因此,结果应该在aList1中记录不匹配的位置3-4。
,但内容也可以是:
<a,b,c>
<d,d,b,d>
所以,结果应该在aList1中记录不匹配的位置1-2和4。我只关注aList1的位置。
花药:
<a,b,c,d,e,f>
<z,e,f,g>
列表的长度可以不同,匹配的元素对于位置5-6是一致的。
我使用for(aList1){for(aList2){}}来做这个,但是它浪费了很多,你能给我一些好的方法吗?非常感谢!
不仅适用于列表,容器可以是vector,也可以是map。
PS:元素很复杂,不是0或1,实际上它们是指针(每个元素包含几个元素,我需要逐个比较,所以这就是为什么我想比较更少的元素,而不是loop for all)
如果您想避免嵌套循环,请尝试这样做:
for (auto aIt = a.begin(), bIt = b.begin(); aIt != a.end() && bIt != b.end(); ++aIt, ++bIt)
您可能想要实现的模式如下:
auto it1, it2;
for (it1 = aList1.begin(), it2 = aList2.begin();
it1 != aList1.end() && it2 != aList2.end(); ++it1, ++it2) {
// code to check elements equality here
}
允许您验证在两个列表中具有相同秩的元素的某些属性,或者支持标准库"可迭代"接口的容器(可以这么说)。注意,您需要容器始终以一致的顺序返回元素,这样比较才有意义。
如果你可以对list进行排序,那么对list进行排序并在一个循环中通过两个指针进行比较(O(N log N))
如果有少量不同的值(例如,如果只有0和1 -它只是2个不同的数字),您可以计算每个数字的计数(例如0和1的数量)并检查结果。(O(N))
如果可以将数字(如index)与list中的元素关联起来,则可以有效地使用std::bitset。它更复杂,但具有高性能。看这里,AND操作
看看std::set_intersection。它非常清晰和简单,实际上也适用于指针。
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 求最大元素位置的分治算法
- 为什么这个选择排序算法仍然切换一个元素,当它已经是其他元素中最小的元素时?
- C++线性搜索算法,确定数组中元素的数量
- 打印所有儿童树元素的最佳算法?
- 使用 Rcpp 加速替换迭代算法中的列表和向量元素是否合法?
- 如何使用cpp编写选择排序算法以降序对元素列表进行排序?
- 找到对称矩阵的最大元素的最有效算法是什么
- 使用简单的暴力算法找到数组中最大的4个元素
- C++ 查找算法:如何找到元素的最后一次出现?
- 对数组进行排序的算法,先是第一个元素,然后是前 2 个元素,然后是前 3 个元素,依此类推
- 如何在不使用标准算法的情况下在排序向量中添加 c 元素?
- C++ std::向量插入两个元素替代算法失败
- 编写递归算法以从链表中删除元素.编写递归算法以将元素添加到链表中
- 使用算法中的插入函数将元素插入空容器中,未给出预期的结果
- 算法在容器中查找具有给定值的元素之一的成员
- 并行算法将向量的元素分配到另一个元素的元素
- 我如何在C 中制作算法,以在不重复的情况下查找集合的变化(即n元素,选择k)
- 删除元素的算法
- 在两个列表中匹配元素算法