正如标题所说,对于C ++,是否存在类似于Objective-C的NSDictionary
的字典?我只需要一个包含(键,值)对的数据结构,并且可以添加和检索。
答案 0 :(得分:10)
使用std :: map。
例如,要从整数映射到std :: string:
#include <map>
#include <string>
#include <iostream>
int main() {
std::map<int, std::string> my_map;
my_map[3] = "hello";
my_map[4] = "world";
std::cout << my_map[3] << " " << my_map[4] << std::endl;
return 0;
}
答案 1 :(得分:5)
您可以在C ++中使用std :: map或std :: unordered_map(NSDictionary是无序的),但是有一个主要区别。由于标准模板库使用值类型的模板,因此对于键和值,映射将锁定为一种类型。使用NSDictionary,因为所有内容都基于NSObject,您可以混合和匹配类型。
如果您的数据是同质的,那么您就已经完成了设置。如果您需要混合类型行为,则需要创建一个自定义类,该类可以包含或派生到您希望使用的所有类型中。
答案 2 :(得分:4)
在标准模板库中查看std :: map。它会做你需要的。
答案 3 :(得分:3)
其他人已经回答了你的问题,我已经+ 1&#39; d。仍有一种感觉,那里有更多可能有用的信息,我也去了。
是的,C ++有std::map
。但是,它是一个有序的关联容器,具有O(log n)搜索/插入复杂性。通常,哈希表是首选。为此目的,std::unordered_map有O(1)最佳案例查找。
通常,哈希表优先于排序树(尽管并非总是如此)。如果性能对您很重要,那么标准的C ++哈希表实现可能不适合您。毕竟,它非常通用。所以你可能想看一下Google Sparse Hash项目 - 它提供了一个密集的哈希和稀疏哈希实现来提升你的性能并进行权衡(即速度与内存等),请参阅documentation了解更多信息
我不确定你对学习C ++有多认真,但是如果你想要多学习它,你会对其丰富的其他不同容器和算法感到惊讶。我曾经发现过SGI的STL文档并且已经使用了十多年了,所以我也推荐给你 - http://www.sgi.com/tech/stl/table_of_contents.html。但它可能只是有点过时,但非常有用。这就是C ++开箱即用的东西。最重要的是,查看Boost,这是一组不属于标准库的不同库 - http://www.boost.org/doc/libs/release/
希望它有所帮助!