使用指针在常量时间内从集合中删除

时间:2015-03-29 15:57:37

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

让我们假设我有一个表格的结构。

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

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

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

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

我在考虑在数据结构中按字典顺序排列一对pair<double, id>(价格和ID)类型(可能是set?)。插入将是有效的(O(log n))但由于数据结构按价格排序而不是ID查找,并且从该数据结构中删除元素将在(O(n))中。那么我可以在Order对象中存储指向价格/ ID对的指针吗?但是仍然没有在设定范围内删除它?有什么想法吗?

1 个答案:

答案 0 :(得分:1)

  

可以快速访问价格最高的订单

什么是“快”?不变? O(logn)

这是一种经典的时间记忆权衡。您可以使用另一个数据结构“max-heap”,保存指向对象的指针,并使用compare函数将两个指针与指向对象的价格进行比较。