有人能指出常用的 C++ STL 容器(如 vector、list、map、set、multimap ......)和 C# 通用容器之间的良好映射吗?
我已经习惯了前者,不知何故我已经习惯了用这些容器来表达算法。我很难找到与这些等效的 C#。
谢谢!
有人能指出常用的 C++ STL 容器(如 vector、list、map、set、multimap ......)和 C# 通用容器之间的良好映射吗?
我已经习惯了前者,不知何故我已经习惯了用这些容器来表达算法。我很难找到与这些等效的 C#。
谢谢!
这是一个粗略的等价物:
Dictionary<K,V>
<=>unordered_map<K,V>
HashSet<T>
<=>unordered_set<T>
List<T>
<=>vector<T>
LinkedList<T>
<=>list<T>
.NET BCL(基类库)没有红黑树(stl map)或优先级队列(make_heap()、push_heap()、pop_heap())。
.NET 集合不像 C++ 那样使用“迭代器”。它们都实现了,并且可以使用“语句”IEnumerable<T>
进行迭代。foreach
如果你想手动控制迭代,你可以GetEnumerator()
在集合上调用“”,它将返回一个IEnumerator<T>
对象。IEnumerator<T>.MoveNext()
大致相当于 C++ 迭代器上的“++”,“Current”大致相当于指针引用运算符(“*”)。
C# 确实具有称为“迭代器”的语言功能。但是,它们与 STL 中的“迭代器对象”不同。相反,它们是一种允许自动实现IEnumerable<T>
. 有关更多信息,请参阅yield return
andyield break
语句的文档。
您可能还想看看STL/CLR这是
... 是标准模板库 (STL) 的打包,它是标准 C++ 库的子集,用于 C++ 和 .NET Framework 公共语言运行时 (CLR)。使用 STL/CLR,您可以在托管环境中使用 STL 的所有容器、迭代器和算法。
另外,请记住,您可以使用/clr标志编译现有的 C++/STL 代码。
这个 SorceForge 项目看起来像是您正在寻找的有趣资源。
没有很好的直接映射,因为例如 C++ set 和 map 使用比较器,而 .Net HashSet 和 Dictionary 使用哈希码。