微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

高效插入、删除和偶尔遍历的最佳数据结构

如何解决高效插入、删除和偶尔遍历的最佳数据结构

所以,我正在尝试制作一个个人项目,我需要知道我可以使用什么数据结构,这使我能够以任何顺序进行快速插入和删除。最重要的是,如果我可以在内部管理数据,那就最好了。我尝试了一个散列集,但一位资深人士的反馈是它不是最好的选择。所以我想知道我可以使用什么?

一些额外的上下文:如果数据在结构中,则无论数量如何,性能都是最重要的。插入和删除非常频繁且顺序随机

解决方法

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 举报,一经查实,本站将立刻删除。