c++ - 具有随机访问元素删除的类队列数据结构

标签 c++ data-structures

是否有类似队列的数据结构也支持在任意点移除元素?入队和出队最常发生,但是队列中的元素移除在速度方面必须相似,因为在某些时期内这可能是最常见的操作。性能的一致性比绝对速度更重要。时间比内存更重要。队列长度很小,在绝对峰值负载下不到 1,000 个元素。如果不是很明显,我会明确说明:不需要随机插入。

已标记 C++,因为这是我的实现语言,但我没有使用(也不想使用)任何 STL 或 Boost。仅限纯 C 或 C++(我会将 C 解决方案转换为 C++ 类。)

编辑:我想我想要的是一种也有队列接口(interface)的字典(或也有字典接口(interface)的队列),这样我就可以做这样的事情:

Container.enqueue(myObjPtr1);
MyObj *myObjPtr2 = Container.dequeue();
Container.remove(myObjPtr3);

最佳答案

我认为双链表正是您想要的(假设您不想要优先级队列):

  1. 简单快速地向两端添加元素
  2. 从任何地方轻松快速地删除元素

您可以使用 std::list 容器,但是(在您的情况下)很难删除元素 如果您只有一个指向元素(包装在 STL 的列表元素中)的指针(或引用),则从列表的中间开始,但是 你没有迭代器。如果使用迭代器(例如存储它们)不是一个选项——那么实现一个双链表(即使有元素计数器)应该很容易。如果您实现自己的列表 - 您可以直接操作指向元素的指针(每个元素都包含指向其两个邻居的指针)。如果您不想使用 Boost 或 STL,这可能是最好的选择(也是最简单的),并且您可以控制一切(您甚至可以为列表元素编写自己的 block 分配器以加快速度事物)。

关于c++ - 具有随机访问元素删除的类队列数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9490358/

相关文章:

c++ - 递归函数返回一个 nan (c++)

c++ - 为什么 Visual C++ 接口(interface)不能包含运算符?

java - Java中的一次写入+多次读取映射?

java - Java中如何实现循环链​​表?

java - 为什么 setNext 在 add (to front) 方法那里?

java - 每个存储桶中的单个实例如何在 java Hashmap 中产生最佳性能?

c++ - 我可以用不同的返回类型重载 'operator new' 吗?

c++ - 何时使用互斥体

c++ - 在 C 库上使用 std::function

mysql - 各种锦标赛/竞赛类型(联赛、阶梯、单败/双败等)的数据结构