Отображение между контейнерами stl C ++ и C # - PullRequest
14 голосов
/ 12 апреля 2009

Может ли кто-нибудь указать на хорошее соответствие между обычными контейнерами C ++ STL, такими как vector, list, map, set, multimap ... и общими контейнерами C #?

Я привык к первым и каким-то образом привык к выражению алгоритмов в терминах этих контейнеров. Я испытываю трудности с поиском эквивалента C # для них.

Спасибо!

Ответы [ 4 ]

21 голосов
/ 12 апреля 2009

Вот грубая эквивалентность:

  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 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 для получения дополнительной информации.

1 голос
/ 12 апреля 2009

Вы также можете взглянуть на STL / CLR , что

... это упаковка Стандартная библиотека шаблонов (STL), подмножество стандартной библиотеки C ++, для использования с C ++ и .NET Рамочная общеязыковая среда выполнения (CLR). С STL / CLR вы можете использовать все контейнеры, итераторы и алгоритмы STL в управляемой окружающая среда.

Также имейте в виду, что вы можете скомпилировать существующий код C ++ / STL с флагом / clr .

0 голосов
/ 12 апреля 2009

Этот проект SorceForge выглядит как интересный ресурс для того, что вы ищете.

0 голосов
/ 12 апреля 2009

Не существует потрясающего прямого отображения, так как, например, C ++ set и map используют компараторы, тогда как .Net HashSet и Dictionary используют хеш-коды.

...