让我们假设我有一个表格的结构。
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对的指针吗?但是仍然没有在设定范围内删除它?有什么想法吗?
答案 0 :(得分:1)
可以快速访问价格最高的订单
什么是“快”?不变? O(logn)
?
这是一种经典的时间记忆权衡。您可以使用另一个数据结构“max-heap”,保存指向对象的指针,并使用compare函数将两个指针与指向对象的价格进行比较。