有人能指出通常的C ++ STL容器(例如vector,list,map,set,multimap ...和C#generic容器)之间的良好映射吗?
我已经习惯了以前的那些,不知怎的,我已经习惯了用这些容器表达算法。我很难找到与之相当的C#。
谢谢!
答案 0 :(得分:21)
这是一个粗略等价:
Dictionary<K,V>
&lt; =&gt; unordered_map<K,V>
HashSet<T>
&lt; =&gt; unordered_set<T>
List<T>
&lt; =&gt; vector<T>
LinkedList<T>
&lt; =&gt; list<T>
.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 return
和yield 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使用哈希码。