Mapping between stl C++ and C# containers

别说谁变了你拦得住时间么 提交于 2019-12-08 23:01:21

问题


Can someone point out a good mapping between the usual C++ STL containers such as vector, list, map, set, multimap... and the C# generic containers?

I'm used to the former ones and somehow I've accustomed myself to express algorithms in terms of those containers. I'm having some hard time finding the C# equivalent to those.

Thank you!


回答1:


Here's a rough equivalence:

  1. Dictionary<K,V> <=> unordered_map<K,V>
  2. HashSet<T> <=> unordered_set<T>
  3. List<T> <=> vector<T>
  4. LinkedList<T> <=> list<T>

The .NET BCL (base class library) does not have red-black trees (stl map) or priority queues (make_heap(), push_heap(), pop_heap()).

.NET collections don't use "iterators" the way C++ does. They all implement IEnumerable<T>, and can be iterated over using the "foreach statement". If you want to manually control iteration you can call "GetEnumerator()" on the collection which will return an IEnumerator<T> objet. IEnumerator<T>.MoveNext() is roughly equivalent to "++" on a C++ iterator, and "Current" is roughly equivalent to the pointer-deference operator ("*").

C# does have a language feature called "iterators". They are not the same as "iterator objects" in the STL, however. Instead, they are a language feature that allows for automatic implementation of IEnumerable<T>. See documentation for the yield return and yield break statements for more information.




回答2:


You may also want to take a look at STL/CLR which is

... is a packaging of the Standard Template Library (STL), a subset of the Standard C++ Library, for use with C++ and the .NET Framework common language runtime (CLR). With STL/CLR, you can use all the containers, iterators, and algorithms of STL in a managed environment.

Also, keep in mind that you can compile your existing C++/STL code with the /clr flag.




回答3:


This SorceForge project looks like an interesting resource for what your looking for.




回答4:


There isn't a terrific direct mapping, since e.g. C++ set and map use comparators, whereas .Net HashSet and Dictionary use hash codes.



来源:https://stackoverflow.com/questions/741054/mapping-between-stl-c-and-c-sharp-containers

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!