15

ベクトル、リスト、マップ、セット、マルチマップなどの通常のC ++ STLコンテナーとC#ジェネリックコンテナーの間の適切なマッピングを誰かが指摘できますか?

私は前者に慣れていて、どういうわけかそれらのコンテナの観点からアルゴリズムを表現することに慣れています。それらに相当するC#を見つけるのに苦労しています。

ありがとうございました!

4

4 に答える 4

21

大まかな同等性は次のとおりです。

  1. Dictionary<K,V><=>unordered_map<K,V>
  2. HashSet<T><=>unordered_set<T>
  3. List<T><=>vector<T>
  4. 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ステートメントのドキュメントを参照してください。

于 2009-04-12T00:54:47.893 に答える
1

また、 STL/CLRを確認することもできます。

...は、C++および.NETFramework共通言語ランタイム(CLR)で使用するための、標準C ++ライブラリのサブセットである標準テンプレートライブラリ(STL)のパッケージです。STL / CLRを使用すると、管理対象環境でSTLのすべてのコンテナー、イテレーター、およびアルゴリズムを使用できます。

また、 /clrフラグを使用して既存のC++/STLコードをコンパイルできることにも注意してください。

于 2009-04-12T00:59:56.943 に答える
0

このSorceForgeプロジェクトは、あなたが探しているものにとって興味深いリソースのように見えます。

于 2009-04-12T00:39:18.680 に答える
-2

たとえば、C ++セットとマップはコンパレータを使用しますが、.Net HashSetとDictionaryはハッシュコードを使用するため、素晴らしい直接マッピングはありません。

于 2009-04-12T00:33:17.523 に答える