【发布时间】:2013-05-07 11:05:53
【问题描述】:
我一直在用 C# 查找字典,它们似乎非常有用,并且想知道是否可以在 C++ 中使用它们,因为我试图在 C++ 中搜索字典,但似乎没有相当于我能找到的。是否有某种库可以下载并包含到项目中,或者是否有一个函数可以使用不同的名称来执行相同的操作。
【问题讨论】:
标签: c++ dictionary
我一直在用 C# 查找字典,它们似乎非常有用,并且想知道是否可以在 C++ 中使用它们,因为我试图在 C++ 中搜索字典,但似乎没有相当于我能找到的。是否有某种库可以下载并包含到项目中,或者是否有一个函数可以使用不同的名称来执行相同的操作。
【问题讨论】:
标签: c++ dictionary
STL中有一个对应的类型,叫做std::map。
它具有与 .NET 字典相同的基本功能,但实现方式完全不同。 std::map 内部基于红黑树数据结构,而Dictionary 内部使用哈希表。
如果您只是在寻找具有相同行为的东西,std::map 可以,但如果您有大量数据,则必须了解不同的性能特征。
【讨论】:
std::unordered_map 使用哈希表实现字典功能(如 C# 的 Dictionary)--如果你有 C++11
boost::unordered_map ;)
std::unordered_map 存在。
std::map 表示对数访问时间(通常基于树实现),std::unordered_map(自 C++11 起)表示预期恒定的最坏情况线性访问时间(通常基于散列实现)。
【讨论】:
std::unordered_map 的散列实现,甚至是非常具体的碰撞管理版本。否则,bucket_count() 和 load_factor() 这样的函数是什么意思?
std::unordered_map 实现确实是相当困难的。我只是想强调一个事实,即该标准实际上并不需要特定的实现,只需要“可观察的效果”(在常识中,不在标准定义中)。
std::hash<Key>)和比较器(默认为@ 987654328@),并且考虑到复杂性限制,它必须是某种哈希表。此外,内存稳定性的要求也限制了设计空间(例如,排除了在重新散列时重新定位的开放寻址)。
std::map 就像Dictionary。
【讨论】:
我们可以在 C++ 中使用 map 使用地图的基本格式是 -
std::map<Key_type, Value_Type> ;
例子-
std::map<std::string,std::string> x = {{"A","ABC"},{"B","DEF"}}
【讨论】: