Mapping between stl C++ and C# containers
Solution 1
Here's a rough equivalence:
-
Dictionary<K,V>
<=>unordered_map<K,V>
-
HashSet<T>
<=>unordered_set<T>
-
List<T>
<=>vector<T>
-
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.
Solution 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.
tato
Updated on June 09, 2022Comments
-
tato about 2 years
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!