【问题标题】:Comparison of C++ STL collections and C# collections?C++ STL 集合和 C# 集合的比较?
【发布时间】:2010-09-07 13:27:26
【问题描述】:

我还在学习 C#,我惊讶地发现 List<T> 更像 std::vector 而不是 std::list。有人可以根据 STL 来描述所有 C# 集合(或者如果 STL 比较很困难,可以使用带有 Wikipedia 链接的标准概念数据类型?我希望该参考资料会非常有用。

感兴趣的集合的最小列表包括(随意添加其他):

  • 数组
  • 列表
  • 数组列表
  • 哈希表
  • 字典
  • 列表字典
  • 排序字典
  • 排序列表
  • 队列
  • 堆栈

编辑:我刚刚发现可能感兴趣的类似问题:Mapping between stl C++ and C# containers

【问题讨论】:

  • 除非您需要以 .NET 1.x 为目标,否则如果您问我,真的没有理由为非泛型类型而烦恼。
  • LinkedList、HashSet、Lookup(通常通过接口ILookup指代)。我不知道 STL,但我 std::list 不像 List 它可能更像 LinkedList
  • @Brian Rasmussen:哪些是非泛型的?只是数组?
  • 数组列表,哈希表。事实上,System.Collections 命名空间中的任何类(与 System.Collections.Generic 不同,它是在 .NET 2 中添加的)

标签: c# c++ collections stl


【解决方案1】:

这是我发现的(忽略旧的非泛型集合):

.NET 集合中明显缺少的是“multi-”变体,例如,multisetmultimap 等。但是,它们添加了许多非常有用的线程安全集合:“Concurrent-”变体,例如,ConcurrentDictionaryConcurrentQueue 等。

【讨论】:

  • 您可能希望将hash_map 替换为unordered_map,虽然技术上仍然不是标准,但它已包含在TR1 中,并将包含在C++0x 中. hash_set-> unordered_set 也是如此。顺便说一句,另一个缺失的变体是std::deque。据我所知,没有 .NET 等价物。
  • 所以没有等同于std::liststd::deque?
  • @kuhaku:没有双向链表。实际上,由于 .NET 应用程序通常使用引用类型,List<T>(实际上是一个向量)通常就足够了。也没有双端队列,这是 IMO 的一个更明显的遗漏。同样,List<T> 通常用作替代品,由于引用类型占主导地位,因此可以正常工作。
  • 发布后我发现:msdn.microsoft.com/en-us/library/he2s3bh7(v=vs.110).aspx 所以我认为 LinkedList 是新的?
  • 非常遗憾微软的天才们在容器不是列表的时候选择了List这个名字。如果你真的想在未来很长一段时间内混淆人们,那就是你决定名字的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多