如何在结构或类的向量中快速搜索具有特定值的对象?c++

How to make a fast search for an object with a particular value in a vector of structs or classes? c++

本文关键字:c++ 对象 搜索 结构 向量      更新时间:2023-10-16

如果我在一个向量中有数千个结构或类对象,如何快速找到所需的对象
例如:
制作一个游戏,我需要最快的碰撞检测方法。每个瓦片都是一个结构,向量图中有许多瓦片,其值为:x和y。所以基本上我是这样做的:

For(i=0;i<end of vector list;i++)
{
 //searching if x= 100 and y =200
}

所以,也许有一种不同的方法,比如智能指针或其他东西可以更快地搜索特定对象?

您应该对向量进行排序,然后使用标准库算法,如binary_searchlower_boundupper_ound

与通过遍历整个向量或使用标准库算法find给出的o(n)相比,以上内容将提供更好的顺应性。

我认为你必须比简单研究一组结构中的值更深入,如果你计划在一个提升的数字中搜索,那就更深入了。结构是如何生成的,它们是如何收集的,以及如何跟踪它们,在创建它们时可以使用一个公共键进行排序?

当你将它们添加到整个结构中时,你应该专注于对它们进行排序,这样你就可以避免每次执行搜索时都会出现大规模的计算爆发。选择一个好的算法(例如AVL排序),这样你就可以有一个O(log(n))添加/删除/搜索。

向量只是对象的无序集合。

您最好选择不同的数据结构(代替矢量或与矢量组合)

例如:

for_each(v.begin(),v.end(), [](int e) 
{
    if (e%2==1)//vector elements that are not divided by 2 without remainder
    cout<<e<<endl;
});