gpt4 book ai didi

C++ 大 vector 搜索项

转载 作者:太空宇宙 更新时间:2023-11-04 14:12:38 25 4
gpt4 key购买 nike

第一次在这里发帖,快把我逼疯了!我无法很好地解释它,所以我会尝试举个例子。

我正在尝试检索一个非常大的 (100k) vector 中的元素以将其删除。 Itterating track it will take ages...所以我试过这个:

这是我列表中的一个小例子。它存储在我的单例粒子发射器类中。

vector<Particle> particles;
particles.reserve(100);

这是我的粒子的剥离版本

class Particle
{
Particle:
~Particle:

void Delete
{
int listNum = (this - &particles[0]);
particles.erase(particles.begin+listNum);
}
};

一切正常,但我不想保存堆栈中的每个粒子,所以我想更改它

vector<Particle> particles;

进入

vector<Particle*> particles;

现在我的问题是:如果 vector 由粒子指针组成,是否仍然可以从列表中删除和删除粒子?

我不确定我的问题是否清楚,但我希望你能理解!

或者如果有人知道更好的性能明智的解决方案,我想听听!

提前致谢!

最佳答案

您打算如何使用这个 std::vector

您说迭代需要很长时间,但如果您的目标是迭代所有值,那么您就不能比连续数组做得更好了。你谈到从容器中删除元素,这表明你需要一个动态数组,这正是 std::vector是。

无论如何,您绝对不想存储原始指针 vector 。你的两个选项应该是 std::vector<Particle> (通常首选)或 std::vector<unique_ptr<Particle>> (仅限 C++11)如果您测量并发现由于使用某些操作而导致性能不足。根据您的用例,std::map<Particle>std::set<Particle>可能是个好主意,但我们没有足够的信息。

您没有存储任何 Particle在堆栈上。 std::vector 中的每个元素已经在免费商店(“堆”)中。

你的插入删除代码应该和你的Particle无关类,要么。插入和删除是对容器的操作,而不是对包含的元素的操作。

要回答您的问题,我们需要了解一些事情。

首先,Particle有多大? ?这可能是最重要的信息。

其次,你用容器做什么?您通常会查看每个 Particle 吗?和他们一起做事,或者你正在寻找一个特定的 Particle在你的整个容器里?如果您正在搜索,您是尝试根据某种键来查找(例如,每个 Particle 都有一个唯一的 ID,并且您在该 ID 上查找整个 Particle),还是您正在查找以查看如果一个Particle匹配另一个(换句话说,您根据 Particle 的身份查找)?

如果您正在查找个人 Particle , 然后 std::set考虑到易用性,它应该是您的首选,因为它允许进行二分查找。如果您的用例要求您按键搜索粒子,那么您将需要 std::map<Key, Particle> .

如果你有一堆粒子并且你想从容器中移除一些,那么对象的大小就很重要了。但是,您通常需要 std::vector对于这种情况。

简而言之,我需要更多信息才能完整回答您的问题。

关于C++ 大 vector 搜索项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13434102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com