类似于c ++中的NSMutableDictionary的类

时间:2011-07-11 10:54:46

标签: c++ objective-c

我想在c ++中创建一个类似于NSMutableDictionary的类。我可以使用哪种数据类型,或者c ++中是否有任何免费库。

我不能使用std :: map,因为它只存储同质数据......我想存储异构数据,我可以使用 Boost库。 boost库中的哪个类(list here)的操作类似于NSMutableDictionary。

4 个答案:

答案 0 :(得分:2)

C ++中NSMutableDictionary没有确切的等价物,但 std::map 可能是您可以充分利用的。

原因:

NSMutableDictionary具有内置引用计数内存管理,而如果它们是指针,则所有STL容器类都不会拥有所包含对象的所有权。

所以最好等效的C ++可以为你提供一个sdt :: map,你可以存储指向你对象的智能指针

编辑:对于您扫描的异常数据项,请使用 boost::any std::map

答案 1 :(得分:1)

您可以使用std::map使用boost::anyboost::variant作为异构值。

如果你想要NSMutableDictionary的所有权语义,你可以存储智能指针而不是值。

答案 2 :(得分:0)

您可能正在寻找STL map,它是标准的一部分,因此可自动使用。

答案 3 :(得分:0)

从我seen in the docs开始,std :: map应该做你想做的事情:

请参阅codepad

std::map<int, std::string> map;
map[1] = "One";
map[2] = "Two";
map[3] = "Three";

std::cout << "Pick " << map[1] << std::endl;

map.insert(std::make_pair(4, "Four"));

// etc.

哈希地图

如果您需要针对大型集合的最佳查找性能,请查看std :: unordered_map(它是TR1,c ++ 0x或boost中的一部分)。它要求您的密钥可以清洗(为您的自定义类型定义哈希函数,或者使用预定义的内部函数)