如何在结构或类的向量中快速搜索具有特定值的对象?c++
How to make a fast search for an object with a particular value in a vector of structs or classes? c++
如果我在一个向量中有数千个结构或类对象,如何快速找到所需的对象
例如:
制作一个游戏,我需要最快的碰撞检测方法。每个瓦片都是一个结构,向量图中有许多瓦片,其值为:x和y。所以基本上我是这样做的:
For(i=0;i<end of vector list;i++)
{
//searching if x= 100 and y =200
}
所以,也许有一种不同的方法,比如智能指针或其他东西可以更快地搜索特定对象?
您应该对向量进行排序,然后使用标准库算法,如binary_search、lower_bound或upper_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;
});
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 构造对象的歧义
- 使用"std::unordereded_map"映射到"std::list"对象