conteneurs STL associatifs. partie 6

Noter cet article




c ++ débutants, Standard Template Library, ассоциативные контейнеры STL C++, pair c++, carte<> c ++Все предыдущие типы контейнеров (рассмотренные подробно или упоминавшиеся: vecteur, liste, et) — это последовательные коллекции, в которых элементы последовательно упорядочены один за другим, а отличаются они между собой способом доступа к элементам.

Другую большую категорию контейнеров составляют так называемые ассоциативные контейнеры, которые представляют собой, фактически, tables, поиск значений в которых производится по некоторым ключам.

Но прежде чем детализировать ассоциативные контейнеры, обратим внимание на такой шаблонный класс (в составе STL) comment paire<>. Это достаточно простая конструкция. Каждый такой объект представляет связную пару полей premier et seconde. При построении таблиц (в STL или в ваших собственных классах) эти поля могут представлять как ключ, так и значение. Но не станем спешить — шаблонный класс paire<> и сам по себе может представлять интерес безотносительно к контейнерам.

Мы можем, par exemple, определить classe представления точек 2D плоскости для решения широкого класса геометрических задач (файл point.h):

point p(*ce); означает, qui crée une nouvelle variable (objet) classe point, и вызывается её копирующий конструктор. Для инициализации берётся значение текущего объекта *ce – comme indiqué par la aiguille ce. à savoir. une nouvelle variable point p établi, comme une copie de l'objet courant. Le reste de vous tous est d'être compris.

résultat:c ++ débutants, Standard Template Library, ассоциативные контейнеры STL C++, paire<> c ++

maintenant, quand nous voyons, ce qu'est un modèle de classe paire<>, nous pouvons aller à la liste des, quels sont les conteneurs associatifs de base STL.

Contrairement à la discuté précédemment consécutif контейнеров, где местоположение элемента определяется его положением среди других элементов, в ассоциативных контейнерах элементы хранятся как пара (paire<>) <clé, sens>. Для поиска значения элемента требуется его ключ поиска, который может быть самых разнообразных типов.

note: Можно считать, dans массиве ou vecteur ключом поиска является индекс, который всегда имеет целочисленное sens. По аналогии, шаблонный тип таблицы (hashtable) carte<>, с которого мы начнём обзор ассоциативных типов, можно рассматривать, как массив или вектор (для простоты понимания ). Он может индексироваться любым (mais toujours только одним) произвольным типом ключа, type: title[ 'une’ ], или pay[ “Ivanov” ].

Одним из наиболее часто используемых ассоциативных контейнеров STL является carte<> — таблица, массив пар <clé, sens>, в котором поиск элемента производится по ключу. Ключ может иметь любой сложный тип, при условии, что для этого типа существует операция сравнения (меньше-больше), или такая операция реализуется пользователем и указывается при создании таблицы. Для иллюстрации простейшего применения carte<> воспользуемся уже рассмотренным раньше примером с базой данных студентов факультета:

résultat:c ++ débutants, Standard Template Library, ассоциативные контейнеры STL C++, pair c++, carte<> c ++Даже такой поверхностный пример (пока мы не углубились в детали ассоциативных контейнеров) позволяет увидеть и сделать некоторые выводы:

  • Элементы, помещаемые в таблицу, размещены не в порядке их помещения (как было с vecteur ou liste), а в отсортированном порядке по значению ключа (ФИО);

  • Вот почему для типа данных ключа должна либо существовать операция сравнения, либо она должна быть создана пользователем;

Для поиска (par la clé) в ассоциативных контейнерах используется не последовательный перебор всех элементов, а в высшей степени эффективные и сложные алгоритмы, отработанные за годы (и даже десятилетия) существования STL . Обычно для реализации carte<> используется техника красно-чёрных деревьев … но детали этого не принципиальны. Важным выводом из этого факта должно стать то, что поиск в ассоциативных контейнерах весьма быстр, и он гораздо лучше, чем если бы вы попытались его реализовывать вручную.

Bulletin de nouvelles leçons sur la programmation:

huile

Sur huile

une expérience pratique sur le développement de logiciels 40 ans. société de logiciels internationale Global Teacher Logic. IBM Developer Works auteur permanent des publications. éditeur scientifique de l'ordinateur littérature maison d'édition "Symbole-Plus", Saint-Pétersbourg.

Laisser un commentaire

Placez le code dans les balises: <pre class="lang:c ++ décodage:true ">VOTRE CODE</pré>