gpt4 book ai didi

swift - 我如何在 Swift 中使用 CFBinaryHeap?

转载 作者:行者123 更新时间:2023-11-28 07:00:33 24 4
gpt4 key购买 nike

我搜索过,但找不到从 Swift 代码中使用 CFBinaryHeap 的示例,所以我将我的示例作为下面的答案发布。

最佳答案

这是一个使用 CFBinaryHeap 存储 Swift 中的 Foo 结构的示例,按整数属性排序。

struct Foo {
var x : Int = 0
}

var callbacks = CFBinaryHeapCallBacks()

// <Foo> comparator
callbacks.compare = { (a,b,unused) in
let afoo : Foo = UnsafePointer<Foo>(a).memory
let bfoo : Foo = UnsafePointer<Foo>(b).memory

if ( afoo.x == bfoo.x ) { return CFComparisonResult.CompareEqualTo }
if ( afoo.x > bfoo.x ) { return CFComparisonResult.CompareGreaterThan }
return CFComparisonResult.CompareLessThan
}

let callbackPointer = UnsafeMutablePointer<CFBinaryHeapCallBacks>.alloc(1)
callbackPointer.initialize(callbacks)
var bh = CFBinaryHeapCreate(nil, 0, callbackPointer, nil)

var fooPointer : UnsafeMutablePointer<Foo>!
fooPointer = UnsafeMutablePointer<Foo>.alloc(1)
fooPointer.initialize(Foo(x: 42))
CFBinaryHeapAddValue(bh, fooPointer)
fooPointer = UnsafeMutablePointer<Foo>.alloc(1)
fooPointer.initialize(Foo(x: 99))
CFBinaryHeapAddValue(bh, fooPointer)
fooPointer = UnsafeMutablePointer<Foo>.alloc(1)
fooPointer.initialize(Foo(x: 2))
CFBinaryHeapAddValue(bh, fooPointer)

var got = UnsafePointer<Foo>(CFBinaryHeapGetMinimum(bh))
got.memory.x // 2
CFBinaryHeapRemoveMinimumValue(bh)
got = UnsafePointer<Foo>(CFBinaryHeapGetMinimum(bh))
got.memory.x // 42
CFBinaryHeapRemoveMinimumValue(bh)
got = UnsafePointer<Foo>(CFBinaryHeapGetMinimum(bh))
got.memory.x // 99
CFBinaryHeapRemoveMinimumValue(bh)

关于swift - 我如何在 Swift 中使用 CFBinaryHeap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32162210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com