【问题标题】:Delete from set in constant time with pointers用指针在恒定时间内从集合中删除
【发布时间】:2015-03-29 15:57:36
【问题描述】:

假设我有一个表单结构。

struct Order {
    int id;
    double price;
    // more data
}

ID 是唯一标识符。现在我要在OrderBook 中跟踪这些Orders。我需要提供一个插入(创建一个新的订单对象)和一个擦除方法(删除具有特定 ID 的订单)。这个想法当然是尽可能高效。

struct OrderBook {
    unordered_map<int, Order> orders; // ID -> Orders
    // ...
}

此外,我必须快速访问当前订单簿中价格最高的订单。

我正在考虑在一个数据结构(可能是set?)中包含一对pair&lt;double, id&gt;(用于价格和ID)类型,按字典顺序排序。插入将是有效的(O(log n)),但由于数据结构是按价格而不是按 ID 排序的,因此从该数据结构中查找和删除元素将在(O(n))中。那么我可以在 Order 对象中存储一个指向 Price/ID 对的指针吗?但这仍然不会在集合内删除它吗?有什么想法吗?

【问题讨论】:

    标签: c++ c++11 data-structures stl


    【解决方案1】:

    快速访问价格最高的订单

    什么是“快”?持续的? O(logn)?

    这是一种经典的时间记忆权衡。您可以拥有另一个数据结构,“最大堆”,保存指向您的对象的指针,并使用比较函数通过指向对象的价格比较两个指针。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-20
      • 2011-03-07
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      相关资源
      最近更新 更多