如何解决高效插入、删除和偶尔遍历的最佳数据结构
所以,我正在尝试制作一个个人项目,我需要知道我可以使用什么数据结构,这使我能够以任何顺序进行快速插入和删除。最重要的是,如果我可以在内部管理数据,那就最好了。我尝试了一个散列集,但一位资深人士的反馈是它不是最好的选择。所以我想知道我可以使用什么?
一些额外的上下文:如果数据在结构中,则无论数量如何,性能都是最重要的。插入和删除非常频繁且顺序随机
解决方法
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* 指针擦除或插入。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。