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