问题描述
所以,我正在尝试制作一个个人项目,我需要知道我可以使用什么数据结构,这使我能够以任何顺序进行快速插入和删除。最重要的是,如果我可以在内部管理数据,那就最好了。我尝试了一个散列集,但一位资深人士的反馈是它不是最好的选择。所以我想知道我可以使用什么?
一些额外的上下文:如果数据在结构中,则无论数量如何,性能都是最重要的。插入和删除非常频繁且顺序随机
解决方法
LinkedList 是您的最佳选择。在 std lib 中, std::list 是它的实现。
列表是序列容器,允许在序列内的任何位置进行恒定时间插入和擦除操作,以及双向迭代。
只要知道后面插入的链表节点地址和位置即可。
在插入值之前增加迭代器:
if (someIterator != someList.end()) {
someIterator++;
}
someList.insert(someIterator,someValue);
但是没有办法从 std::list 中删除 O(1)。除非你知道被删除元素的索引或迭代器。
您可能需要考虑使用侵入式列表,其中列表节点直接嵌入到结构中,就像您已经完成的那样。
您可以使用 boost::intrusive 或自己动手。
自己的实现
定义节点
/* Node of a doubly linked list */
struct Node {
int data;
struct Node* next; // Pointer to next node in DLL
struct Node* prev; // Pointer to previous node in DLL
};
现在您可以通过 Node* 指针擦除或插入。