是否有标准算法来检查容器 A 是否是容器 B 的超集?
Is there a standard algorithm to check if container A is a superset of container B?
我一直在寻找一种标准算法,给定两个容器 A 和 B,两者都没有重复项,如果 A 的所有元素与 B 的一个元素比较为真,则 returns 为真。我使用 std::all_of
带有一个谓词来检查另一个容器中的成员资格,但我想知道是否有更优雅的解决方案..
Is there a STL algorithm to check if two containers contain same elements?
我想你的意思是“比较相等的元素”。一个 object 只能是一个容器的元素(至少在所有标准容器的情况下)。
i was looking for an std:: algorithm that given two containers A and B, returns true if all the elements of A are contained in B.
此题与标题题不同
对于第一个,有std::is_permutation
。但是,对于某些容器类型,有更高效的算法。例如,如果容器是排序的(如std::set
),那么你可以简单地比较是否相等。
对于第二个,没有通用算法。如果容器已排序,则可以使用 std::includes
。否则你可以写一个先排序的算法,然后使用 std::includes
.
I used std::all_of with a predicate that checks membership in the other container
如果较大的容器具有快速查找(如无序集),那么这个解决方案很好。
std::includes 如果两个容器都已排序,则这样做。
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector< int > A = {1, 2, 3, 4, 7};
std::vector< int > B = { 1, 2 ,3};
std::vector< int > C = { 3, 4, 5};
bool BinA = std::includes(A.begin(), A.end(), B.begin(), B.end());
bool CinA = std::includes(A.begin(), A.end(), C.begin(), C.end());
std::cout<< "B in A = " << BinA <<std::endl;
std::cout<< "C in A = " << CinA <<std::endl;
}
https://godbolt.org/z/dnoM4xPbY
如果您没有对它们进行排序,并且您t/don不想对它们进行排序,那么我相信 all_of 方法是尽可能高效的。
如果性能很重要,我认为首先排序更有效,但你应该检查你的具体情况。
我一直在寻找一种标准算法,给定两个容器 A 和 B,两者都没有重复项,如果 A 的所有元素与 B 的一个元素比较为真,则 returns 为真。我使用 std::all_of
带有一个谓词来检查另一个容器中的成员资格,但我想知道是否有更优雅的解决方案..
Is there a STL algorithm to check if two containers contain same elements?
我想你的意思是“比较相等的元素”。一个 object 只能是一个容器的元素(至少在所有标准容器的情况下)。
i was looking for an std:: algorithm that given two containers A and B, returns true if all the elements of A are contained in B.
此题与标题题不同
对于第一个,有std::is_permutation
。但是,对于某些容器类型,有更高效的算法。例如,如果容器是排序的(如std::set
),那么你可以简单地比较是否相等。
对于第二个,没有通用算法。如果容器已排序,则可以使用 std::includes
。否则你可以写一个先排序的算法,然后使用 std::includes
.
I used std::all_of with a predicate that checks membership in the other container
如果较大的容器具有快速查找(如无序集),那么这个解决方案很好。
std::includes 如果两个容器都已排序,则这样做。
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector< int > A = {1, 2, 3, 4, 7};
std::vector< int > B = { 1, 2 ,3};
std::vector< int > C = { 3, 4, 5};
bool BinA = std::includes(A.begin(), A.end(), B.begin(), B.end());
bool CinA = std::includes(A.begin(), A.end(), C.begin(), C.end());
std::cout<< "B in A = " << BinA <<std::endl;
std::cout<< "C in A = " << CinA <<std::endl;
}
https://godbolt.org/z/dnoM4xPbY
如果您没有对它们进行排序,并且您t/don不想对它们进行排序,那么我相信 all_of 方法是尽可能高效的。 如果性能很重要,我认为首先排序更有效,但你应该检查你的具体情况。