我想创建一个不复制其键的自定义词典(只保留)。
在内部,我计划使用带有特殊Pair对象的NSMutableArray
,其中对的第一个对象是键,第二个是值。
钥匙都是独一无二的。
为了快速检索键上的对象,我使用二进制搜索算法 - 所以数组应该在对的第一个对象的内存地址上排序(注意!)。
(顺便说一句,这就是为什么我拒绝使用CFDictionaryRef和一组特殊的回调 - 我怀疑如果没有提供合理的哈希值,它会降级为O(n))< / p>
这是一个坏主意,假设:
isEqual:
而非地址比较); 为什么不好(或好)?
如何从指针获取内存地址?只需将它投射到long long int
或类似的东西?
谢谢!
答案 0 :(得分:1)
我认为objective-c中的指针与c / c ++类似。我已经构建了排序的内存地址数组,用于查找堆栈跟踪。在64位机器上,它应该被转换为64位的标量变量,可能是长整数。或者,如果您可以使用uint64_t类型,它将保证正确的大小。对于32位机器,请使用无符号32位整数或uint32_t。你可以使用&gt; &LT; &gt; =&lt; = =和 - 指针上的运算符,您也可以使用带有指针和整数的+运算符。
答案 1 :(得分:1)
要从指针获取整数值,请转换为intptr_t
或uintptr_t
。这些类型在<stdint.h>
中定义,并且明确保证足够大以容纳指针的值。