我正在开始一个 Objective-C++ 项目的工作,在我进行任何繁重的设计之前,先了解一下这两种语言的综合感觉。我对自动引用计数如何与 C++ 集成很感兴趣:我们得到了 NSObjects
的智能指针等价物。在 STL 容器中正确处理保留/释放(参见 David Chisnall 在 http://www.informit.com/articles/article.aspx?p=1745876&seqNum=3 上的文章)。
我想使用 STL 映射作为来自 NSStrings
的类型安全映射到 C++ 值。我可以将映射声明为
std::map<NSString*, MyType> mapping
使用 ARC,此映射可以正确处理内存管理。但它不遵循
NSString
正确的值语义,因为它使用指针比较而不是 -[NSString compare:]
.让 STL 映射使用字符串比较而不是指针比较的最佳方法是什么?
我应该尝试专攻
std::less<NSString*>
?我应该声明一个像
std::map<NSString*, MyType, MyCompare>
这样的显式比较器吗? ?我应该包装
NSString*
实现 operator<
的智能指针中的键?
最佳答案
您需要一个调用 NSString 的比较函数的自定义比较对象,如下所示:
#include <functional>
#include <map>
struct CompareNSString: public std::binary_function<NSString*, NSString*, bool> {
bool operator()(NSString* lhs, NSString* rhs) const {
if (rhs != nil)
return (lhs == nil) || ([lhs compare: rhs] == NSOrderedAscending);
else
return false;
}
};
std::map<NSString*, MyType, CompareNSString> mapping;
关于STL - 如何在 Objective-C++ std::map 中使用 NSString 作为键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8945909/