15

有人能指出常用的 C++ STL 容器(如 vector、list、map、set、multimap ......)和 C# 通用容器之间的良好映射吗?

我已经习惯了前者,不知何故我已经习惯了用这些容器来表达算法。我很难找到与这些等效的 C#。

谢谢!

4

4 回答 4

21

这是一个粗略的等价物:

  1. Dictionary<K,V><=>unordered_map<K,V>
  2. HashSet<T><=>unordered_set<T>
  3. List<T><=>vector<T>
  4. 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 returnandyield break语句的文档。

于 2009-04-12T00:54:47.893 回答
1

您可能还想看看STL/CLR这是

... 是标准模板库 (STL) 的打包,它是标准 C++ 库的子集,用于 C++ 和 .NET Framework 公共语言运行时 (CLR)。使用 STL/CLR,您可以在托管环境中使用 STL 的所有容器、迭代器和算法。

另外,请记住,您可以使用/clr标志编译现有的 C++/STL 代码。

于 2009-04-12T00:59:56.943 回答
0

这个 SorceForge 项目看起来像是您正在寻找的有趣资源。

于 2009-04-12T00:39:18.680 回答
-2

没有很好的直接映射,因为例如 C++ set 和 map 使用比较器,而 .Net HashSet 和 Dictionary 使用哈希码。

于 2009-04-12T00:33:17.523 回答