我正在尝试创建维基百科link中描述的Queap
数据结构
由于缺乏信息,我陷入Insert
操作的实现。那里描述的操作Insert
似乎设置了element
的一些数据,这些数据将被插入
public static void Insert(Queap Q, Element x) {
if (Q.n == 0)
Q.minL = x;
Q.l.add(x);
x.inList = true;
if (x.compareTo(Q.minL) < 0)
Q.minL = x;
}
该操作似乎具有复杂性O(1)
,如下所述:操作的成本为O(1)。列表L的大小增加1,潜在增加一些常数c。。但如果元素是int
值,我该如何设置它?
答案 0 :(得分:1)
根据article:
要将元素
x
添加到列表l
,将元素x
添加到列表的末尾,并将元素x
中的位变量设置为1。完成此操作以确定元素是在列表中还是在2-4树中。
你问:
但是如果元素是
int
值,我该怎么设置呢?
queap中的元素不直接对应于存储的数据类型的实例(在您的情况下,为int
)。
相反,元素对应于以下组合:
这可以使用struct
:
template <typename T>
struct Element {
T value;
bool in_list;
};
或使用pair
:
template <typename T>
using Element = std::pair<T, bool>;