stl C ++和C#容器之间的映射

时间:2009-04-12 00:29:05

标签: c# c++ stl containers

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

我已经习惯了以前的那些,不知怎的,我已经习惯了用这些容器表达算法。我很难找到与之相当的C#。

谢谢!

4 个答案:

答案 0 :(得分:21)

这是一个粗略等价:

  1. Dictionary<K,V>&lt; =&gt; unordered_map<K,V>
  2. HashSet<T>&lt; =&gt; unordered_set<T>
  3. List<T>&lt; =&gt; vector<T>
  4. LinkedList<T>&lt; =&gt; list<T>
  5. .NET BCL(基类库)没有红黑树(stl map)或优先级队列(make_heap(),push_heap(),pop_heap())。

    .NET集合不像C ++那样使用“迭代器”。它们都实现IEnumerable<T>,并且可以使用“foreach语句”进行迭代。如果您想手动控制迭代,可以在集合上调用“GetEnumerator()”,这将返回IEnumerator<T>对象。 {C}迭代器上的IEnumerator<T>.MoveNext()大致相当于“++”,而“Current”大致相当于指针引用运算符(“*”)。

    C#确实有一个名为“iterators”的语言功能。但是,它们与STL中的“迭代器对象”不同。相反,它们是一种语言功能,允许自动实现IEnumerable<T>。有关详细信息,请参阅yield returnyield break语句的文档。

答案 1 :(得分:1)

您可能还想查看STL/CLR

  

...是一个包装   标准模板库(STL),a   标准C ++库的子集,   用于C ++和.NET   框架公共语言运行时   (CLR)。使用STL / CLR,您可以使用全部   容器,迭代器和   管理中的STL算法   环境。

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

答案 2 :(得分:0)

This SorceForge project看起来像是您寻找的有趣资源。

答案 3 :(得分:-2)

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