ベクトル、リスト、マップ、セット、マルチマップなどの通常のC ++ STLコンテナーとC#ジェネリックコンテナーの間の適切なマッピングを誰かが指摘できますか?
私は前者に慣れていて、どういうわけかそれらのコンテナの観点からアルゴリズムを表現することに慣れています。それらに相当するC#を見つけるのに苦労しています。
ありがとうございました!
ベクトル、リスト、マップ、セット、マルチマップなどの通常のC ++ STLコンテナーとC#ジェネリックコンテナーの間の適切なマッピングを誰かが指摘できますか?
私は前者に慣れていて、どういうわけかそれらのコンテナの観点からアルゴリズムを表現することに慣れています。それらに相当するC#を見つけるのに苦労しています。
ありがとうございました!
大まかな同等性は次のとおりです。
Dictionary<K,V>
<=>unordered_map<K,V>
HashSet<T>
<=>unordered_set<T>
List<T>
<=>vector<T>
LinkedList<T>
<=>list<T>
.NET BCL(基本クラスライブラリ)には、赤黒木(stlマップ)または優先度付きキュー(make_heap()、push_heap()、pop_heap())がありません。
.NETコレクションは、C++のように「イテレータ」を使用しません。それらはすべて実装されており、「ステートメント」IEnumerable<T>
を使用して繰り返すことができます。foreach
反復を手動で制御したい場合はGetEnumerator()
、オブジェクトを返すコレクションで""を呼び出すことができますIEnumerator<T>
。IEnumerator<T>.MoveNext()
C++イテレータの「++」とほぼ同等であり、「Current」はポインタ差分演算子(「*」)とほぼ同等です。
C#には「イテレータ」と呼ばれる言語機能があります。ただし、これらはSTLの「イテレータオブジェクト」と同じではありません。代わりに、これらはの自動実装を可能にする言語機能ですIEnumerable<T>
。yield return
詳細については、およびyield break
ステートメントのドキュメントを参照してください。
また、 STL/CLRを確認することもできます。
...は、C++および.NETFramework共通言語ランタイム(CLR)で使用するための、標準C ++ライブラリのサブセットである標準テンプレートライブラリ(STL)のパッケージです。STL / CLRを使用すると、管理対象環境でSTLのすべてのコンテナー、イテレーター、およびアルゴリズムを使用できます。
また、 /clrフラグを使用して既存のC++/STLコードをコンパイルできることにも注意してください。
このSorceForgeプロジェクトは、あなたが探しているものにとって興味深いリソースのように見えます。
たとえば、C ++セットとマップはコンパレータを使用しますが、.Net HashSetとDictionaryはハッシュコードを使用するため、素晴らしい直接マッピングはありません。