Подтвердить что ты не робот

Сравнение коллекций STL С++ и коллекций С#?

Я все еще изучаю С# и был удивлен, узнав, что List<T> больше похож на std::vector, чем на std::list. Может ли кто-нибудь описать все коллекции С# в терминах STL (или если сравнение STL сложно, стандартные концептуальные типы данных с ссылками Википедии? Я ожидаю, что эта ссылка будет широко полезна.

Минимальный список интересующих коллекций включает (не стесняйтесь добавлять других):

  • Массив
  • List
  • ArrayList
  • HashTable
  • Словарь
  • ListDictionary
  • SortedDictionary
  • SortedList
  • Queue
  • Stack

Изменить: я просто нашел этот похожий вопрос, который может представлять интерес: Сопоставление между контейнерами stl С++ и С#

4b9b3361

Ответ 1

Вот что я нашел (игнорируя старые не общие коллекции):

  • Array - массив C, хотя в .NET-массиве может быть ненулевой начальный индекс.
  • List<T> - std::vector<T>
  • Dictionary<TKey, TValue> - unordered_map<Key, Data>
  • HashSet<T> - unordered_set<Key>
  • SortedDictionary<TKey, TValue> - std::map<Key, Data>
  • SortedList<TKey, TValue> - эквивалент a std::vector<T>, но сохраняя его упорядоченным, используя двоичный поиск + вставку при добавлении элементов.
  • SortedSet<T> - std::set<Key>
  • Queue<T> - std::queue<T>
  • Stack<T> - std::stack<T>
  • LinkedList<T> - std::list<T>

Примечательно, что в коллекциях .NET заметны варианты "multi-", например, multiset, multimap и т.д. Однако они добавили ряд очень полезных потокобезопасных коллекций: варианты "Concurrent-", например, ConcurrentDictionary, ConcurrentQueue и т.д.