我想将给定类的对象映射到另一个对象的对象.然而,我想用作关键的类不是由我编写的,而是一个struct带有一些值的简单类.std :: map命令它的内容,我想知道它是如何做的,以及是否有任意类可以用作键或者是否需要定义一组需求(运算符和不需要).
如果是这样,我可以为实现运算符映射用途的类创建一个包装器.我只需要知道我需要先实现什么,并且我在网上找到的类的引用都没有指定它们.
C++ std :: priority_queue只需要一个部分顺序.但如果它的实现是二进制堆,它是如何工作的?例如:假设我们有一个偏序集( {a, b, c, x}, {c < b, b < a, c < a} ),x具有无关a,b,c.那么最大堆是:
layer 1: x
layer 2: b x
layer 3: x x a c
Run Code Online (Sandbox Code Playgroud)
在弹出操作之后,以教科书中常见的方式,即用root替换root c并将大小减小1.然后我们需要在下面的树根下堆积树:
layer 1: c
layer 2: b x
layer 3: x x a
Run Code Online (Sandbox Code Playgroud)
我们会互换c,b因为c < b,不是吗?什么?从那以后我们仍然没有有效的堆b < a.但b不能"看" a.