有人能指出常用C++ STL容器(如vector,list,map,set,multimap ...和C#泛型容器)之間的良好映射嗎?stl C++和C#容器之間的映射
我習慣了前者,不知何故,我習慣於用這些容器來表達算法。我很難找到相當於C#的C#。
謝謝!
有人能指出常用C++ STL容器(如vector,list,map,set,multimap ...和C#泛型容器)之間的良好映射嗎?stl C++和C#容器之間的映射
我習慣了前者,不知何故,我習慣於用這些容器來表達算法。我很難找到相當於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 map)或優先級隊列(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
語句的文檔。
對不起,但我認爲你有C++和Java在這裏有一些困惑。 (雖然其餘的討論似乎是正確的,但您在表右側列出的所有類都是Java集合,而不是STL容器。) – 2009-04-12 01:22:08
我的套件錯了,我在散列內容中省略了「_」(他們是不標準的,但大多數編譯器都支持它們)。 我更新了名字。 – 2009-04-12 01:35:56
沒有一個了不起的直接映射,例如, C++集合和映射使用比較器,而.Net HashSet和Dictionary使用哈希代碼。
This SorceForge project看起來像一個有趣的資源,爲您尋找。
您可能還需要看一看STL/CLR是
...是 標準模板庫(STL),標準C++庫的一個子集 , 的使用的包裝與C++和.NET框架公共語言運行庫 (CLR)。使用STL/CLR,您可以在託管的 環境中使用STL的所有容器,迭代器和 算法。
另外,請記住,您可以用/CLR標誌編譯現有的C++/STL代碼。
你有什麼經驗嗎?據我瞭解,它只允許您在託管C++中使用類似STL的代碼。它不提供與語言無關的STL類似的實現,是嗎?我很想在C#中使用類似STL的東西。 :) – jalf 2009-04-12 12:57:15
我沒有真的嘗試過,但它看起來像所有你需要做的是添加一個引用到Microsoft.VisualC.STLCLR並實現IVector <>(或IDeque <>,IList <>等。) – 2009-04-12 18:27:40
你已經偶然發現了.NET基類庫最大的缺點......他們錯過了很多相對常見的容器。雖然LINQ在替換C++迭代器方面做得不錯,但它仍然不靈活(或高效) – jalf 2009-04-12 12:58:36