Сопоставление между контейнерами stl C++ и C#
может кто-то указать хорошее сопоставление между обычными контейнерами STL c++, такими как vector, list, map, set, multimap... а универсальные контейнеры C#?
Я привык к первым, и каким-то образом я привык выражать алгоритмы в терминах этих контейнеров. Мне трудно найти эквивалент C# для них.
спасибо!
4 ответов
здесь грубо эквивалентности:
-
Dictionary<K,V>
unordered_map<K,V>
-
HashSet<T>
unordered_set<T>
-
List<T>
vector<T>
-
LinkedList<T>
list<T>
в .NET BCL (библиотека базовых классов) нет красно-черных деревьев (карта stl) или очередей приоритетов (make_heap (), push_heap (), pop_heap ()).
коллекции .NET не используют "итераторы" так, как это делает C++. Все они реализуют IEnumerable<T>
, и может быть повторен с помощью"foreach
заявление". Если вы хотите вручную управлять итерацией, вы можете вызвать "GetEnumerator()
" о коллекции, которая вернет IEnumerator<T>
принтер Objet. IEnumerator<T>.MoveNext()
примерно эквивалентно " ++ "на итераторе C++, а" Current "примерно эквивалентен оператору указателя-почтения ("*").
C# имеет функцию языка, называемую "итераторы". Однако они не совпадают с "объектами итератора" в STL. Вместо этого, они являются языком функция, которая позволяет для автоматической реализации IEnumerable<T>
. См. документацию для yield return
и yield break
заявлений для получения дополнительной информации.
вы также можете взглянуть на STL / CLR что это
... в упаковке стандартная библиотека шаблонов (STL), a подмножество стандартной библиотеки C++ , для использования С C++ и .NET Framework общеязыковая среда выполнения (СБРОС.) С STL / CLR вы можете использовать все контейнеры, итераторы и алгоритмы STL в управляемом окружающая среда.
кроме того, имейте в виду, что вы можете скомпилировать существующий код C++ / STL с помощью / clr флаг.
этот проект SorceForge выглядит как интересный ресурс для того, что вы ищете.
нет потрясающего прямого отображения, так как, например, c++ set и map используют компараторы, тогда как .Net HashSet и словарь используют хэш-коды.