我寻找一种有效的方法来查看向量A是否包含与向量B相同的元素。两个向量具有不同的大小,每个元素是具有两个元素(x和y坐标)的另一个向量。我需要向量A中相等元素的位置。 目前我正在使用for循环,但是矢量b最多可以包含8000个元素,而我的程序目前非常慢。 我读到了关于算法库的内容,但我找不到能帮助我或者我不理解它的东西。
std::vector<std::vector<int>> VecA;
std::vector<std::vector<int>> VecB; //size of VecB >> VecA
for( int i = 0; i < VecA; i++)
{
for( int z = 0; z < VecB; z++)
{
if (VecA.at(i) == VecB.at(z))
{
Do Something with VecA.at(i)
}
}
}
感谢您的帮助。
答案 0 :(得分:2)
一些建议:
std::vector<int>
获取一对值,使用std::pair<int,int>
或自定义结构std::vector
,请std::unordered_set<Coordinate>
使用std::unordered_set<Coordinate>
一切都会更有效率。假设:
struct Coordinate {
int x;
int y;
}
现在提供自定义std::hash<Coordinate>
专精,可以从size_t
对象创建Coordinate
并使用std::set_intersection
或比较元素的自定义循环。
如果你对坐标有一些范围限制,那么x
和y
都适合16位(例如[0,65536)
),那么散列是微不足道的(x << 16 | y
),而且它更明确的是它具有明确性(具有相同键的两个元素将是相同的元素),这为优化提供了更多空间。
答案 1 :(得分:0)
我的建议: