contenitori STL associativi. parte 6




C ++ principianti, Standard Template Library, ассоциативные контейнеры STL C++, pair c++, carta geografica<> C ++Все предыдущие типы контейнеров (рассмотренные подробно или упоминавшиеся: vettore, lista, e) — это последовательные коллекции, в которых элементы последовательно упорядочены один за другим, а отличаются они между собой способом доступа к элементам.

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

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

Мы можем, per esempio, определить classe rappresentazione 2D di punti nel piano per un'ampia classe di problemi geometrici (файл point.h):

punto p(*Questo); означает, che crea una nuova variabile (oggetto) classe punto, и вызывается её копирующий конструктор. Для инициализации берётся значение текущего объекта *Questoто на что указывает pointer Questo. vale a dire. новая переменная punto p создаётся, как копия текущего объекта. В остальном вам всё должно быть понятно.

risultato:C ++ principianti, Standard Template Library, ассоциативные контейнеры STL C++, coppia<> C ++

ora, когда мы видим, что из себя представляет шаблонный класс coppia<>, мы можем перейти к обзору того, что представляют собой основные ассоциативные контейнеры STL.

В отличие от рассмотренных ранее последовательных контейнеров, где местоположение элемента определяется его положением среди других элементов, в ассоциативных контейнерах элементы хранятся как пара (coppia<>) <chiave, senso>. Для поиска значения элемента требуется его ключ поиска, который может быть самых разнообразных типов.

nota: Можно считать, in массиве o векторе ключом поиска является индекс, который всегда имеет целочисленное senso. По аналогии, шаблонный тип таблицы (tabella hash) carta geografica<>, с которого мы начнём обзор ассоциативных типов, можно рассматривать, как массив или вектор (для простоты понимания ). Он может индексироваться любым (ma sempre только одним) произвольным типом ключа, tipo: title[ 'un’ ], или pay[ “Ivanov” ].

Uno dei più comunemente usato è contenitori STL associativi carta geografica<> - tavolo, una matrice di coppie <chiave, senso>, in cui la ricerca viene eseguita su un elemento chiave. La chiave può essere qualsiasi tipo di complesso, purché, che esiste per questo tipo di operazione confronto (Più-meno), o una simile operazione attuata dall'utente e viene specificato quando si crea una tabella. Per illustrare la semplice applicazione carta geografica<> воспользуемся уже рассмотренным раньше примером с базой данных студентов факультета:

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

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

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

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

Newsletter nuove lezioni sulla programmazione:


Accetto di ricevere messaggi da purecodecpp.com sulla mia e-mail

data
pagina
contenitori STL associativi. parte 6
valutazione
5
olio

Di olio

esperienze pratiche circa lo sviluppo del software 40 anni. Maestro globale Logic società di software internazionale. IBM Developer funziona autore permanente di pubblicazioni. redattore scientifico del computer casa editrice letteratura "Simbolo-Plus", San Pietroburgo.

Lascia un Commento

Inserire il codice nei tag: <pre class="lang:C ++ decodifica:true ">IL TUO CODICE</pre>