Контейнеры STL: carta geografica. parte 7




mappa класс C ++, контейнеры STL, map per i principiantiAbbiamo considerato un semplice esempio di come usare la mappa<>, ma l'uso di un tale contenitore è già molto più complicato contenitore di sequenza. contenitore carta geografica<> (tavolo, display):

  • Esso contiene coppie ordinate <chiave,senso>, dove la chiave e il valore possono appartenere a tipi arbitrari. Per il tipo di chiave deve essere un predeterminato, o definite dall'utente operazione di confronto;

  • Elementi con qualsiasi valore chiave dovrebbe essere unico;

  • Il tentativo di aggiungere (metodo inserire()) a presentare una nuova coppia con un fine valore di chiave esistente fallimento;

  • L'operazione di aggiunta di una nuova coppia alle rilevazioni tabella coppia tipo <iteratore, bool>, in cui il secondo componente (booleano secondo) punta al successo dell'operazione. Se vero, il primo componente del valore di ritorno (primo) iteratore dà un elemento aggiunto. Se lui falso, ritorna iteratore elemento esistente con la stessa chiave;

  • operazioni tavola rotante ( [ ] o a() ) richiede alcun tipo di valore come chiave, determinato tasto;

  • Operazione indicizzazione a(), quando si imposta il tasto del parametro, Assenza negli elementi della tabella, cause eccezione;

  • davanti, operazione di indicizzazione [ ], quando si imposta il tasto del parametro, Assenza negli elementi della tabella, l'eccezione non causa. (al contrario, anche se l'indicizzazione ha chiesto di sola lettura, aggiunge il contenitore un nuovo elemento con il valore di chiave desiderato, ma nullo valori di campo);

Queste definizioni possono sembrare complicato, ma spiegherebbe l'esempio successivo.

Prima di presentare l'esempio, dobbiamo preparare alcuni file di dati di test per lavorare con contenitori associativi. Il lavoro è un dato carattere voluminoso dimostra il potere di utilizzare tabelle STL. Mentre ci prepariamo i file di dati di testo, contenente lingua inglese testi originali di diverse poesie di Lewis Carroll.

Non è un po 'più complicato da usare e russi testi, ma in questo caso si deve lavorare con classi wstring e le trasformazioni localizzato, aumenterà solo l'ingombro di esempi, senza un aumento della loro significatività.

Ti ho dato un paio di testi di diversa lunghezza per un test approfondito del codice e parti successive della presentazione (file vengono mostrati con conteggio del numero di righe di testo). è, per esempio, Humpty-Dumpty.txt - è il testo della parte VI Humpty Dumpty-«Alice nel paese delle meraviglie».

30 Fratello e sorella 11 Humpty Dumpty- 34 Jabberwock

A Jabberwock.txt - è il testo della parte VI Humpty Dumpty-«Alice nel paese delle meraviglie" - conosciuta nella versione in lingua russa del poema (da VS Vysotsky): О бойся Бармаглота, сын! Он так свиреп и дик

В нашем оригинале (авторском, англоязычном, для отладкифайл Jabberwock.txt) этот текст выглядит так:

Jabberwock Twas brillig, and the slithy toves
Did gyre and gimble in the wabe:
All mimsy were the borogoves,
And the mome raths outgrabe.

«Beware the Jabberwock, my son!
The jaws that bite, the claws that catch!
Beware the Jubjub bird, and shun
The frumious Bandersnatch!» …

Текст, безусловно, синтаксически сложный, что делает его прекрасным материалом для отладки приложений. Вам предоставляется отменный материал для дальнейших самостоятельных экспериментов!

Итак … наше приложение будет подсчитывать число вхождений каждой из литер алфавита в предлагаемый текст, utilizzando carta geografica<>:

contenitore carta geografica<> — не самый лучший вариант для поставленных целей: при нахождении новой литеры в тексте мы попытаемся добавить её в качестве ключа таблицы, но если эта литера уже присутствует в таблице, то попытка завершится неудачей. In questo caso,, dopo неудачи, мы, по индексу ключа, просто инкрементируем число его вхождений. И вот что мы поучаем:

mappa класс C ++, контейнеры STL, map per i principianti
Brother_And_Sister.txt
mappa класс C ++, контейнеры STL, map per i principianti
Humpty-Dumpty.txt
mappa класс C ++, контейнеры STL, map per i principianti
Jabberwock.txt

Обратите внимание как увеличился размер таблицы после того, как в ней был индексированием [ ] осуществлён поиск (по чтению!) отсутствующих ключей (‘q’, ‘z’, ‘x’).

Возникает вопрос: почему вы видим в качестве dimensione() такие значения как 44, 47, 50, 52, если мы наблюдаем только раскладку по повторяемости 26 символов от ‘aдо ‘z’? Ответ прост: потому что в текст могут входить символы пробела, знаков препинания, заглавных литер, которых мы не наблюдаем в выдаче теста.

Если воспользоваться такой новой возможностью стандарта C++11, как списки инициализации, la creazione e l'inizializzazione della tabella possono apparire molto più facile:

naturalmente, Tutto questo sarà compilato solo se si specificano le opzioni del compilatore per l'utilizzo di C ++ standard di 11:mappa класс C ++, контейнеры STL, map per i principianti

Da quanto sopra dovrebbe essere chiaro, che qualsiasi tipo può essere utilizzata come chiave di ricerca in una tabella, fornito sempre, per lui o vi è un'operazione di confronto naturale (int, galleggiante, corda, ...), o noi stessi definiamo una funzione definita dall'utente, che sarà utilizzato per i confronti. Несколько способов сделать это показаны ниже:

qui, sostituzione funzione di confronto chiave, modificare l'ordine delle voci quando si inseriscono nella tabella. (Nella seconda forma di realizzazione, un oggetto funzionale, funtore, lavoro che sarà discussa in una parte separata della nostra recensione.)

mappa класс C ++, контейнеры STL, map per i principianti

Newsletter nuove lezioni sulla programmazione:


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

data
pagina
Контейнеры STL: carta geografica. parte 7
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.

8 pensieri su "Контейнеры STL: carta geografica. parte 7

  1. Получилась интересная и понятная статья.
    А будет продолжениеудаление, замена, contains, поиск по ключу и др.?

  2. Обязательно будет.
    Это какая часть? 7-я?
    Так уже готовых есть 16.
    Ожидайте.

  3. Спасибо за невероятный труд и помощь в изучении С++, однако теперь пошли непонятки. До сих пор нормально было в течении уроков. Прежде чем что-то писать в качестве примера, нужно объяснить что это. altrimenti, если пример непонятен, то толка нет от учебы, только практика запоминается и усваивается. Ладно неупомянутый символ ^Z (ctrl-Z) удается заметить на картинке результата работы программы со стихами в консоли и хорошо, если читатель знает, что он означает конец файла для консоли, без его ввода программа не работала бы (цикл не завершился бы). Но в следующем примере пошло еще тяжелее .

    1) функторы не изучались, что это неизвестно и пример понять невозможно, потому что там написано bool operator(), а мы так не делали ни разу, после слова operator перед скобками всегда писали знак оператора (+, -, …). Хорошо, можно подумать, что наверное подразумевается тот знак, который находится в выражении после return. А в следующих строчках еще более непонятно:

    2) carta geografica< int, int, less > – это что? Было изучено что map состоит из пары ключ-значение, а less что здесь делает и что такое less вообще непонятно. По виду можно предположить что это некий шаблонный класс с параметром int. Но скорее всего он указывает порядок сортировки по значению ключа в убывании или возрастании данных в контейнере map.

    3) map mg1(great); – это непонятно. Можно догадываться в том или ином направлении, только догадки мало помогают в таких делах. mg1(great) – это конструктор с параметром функцией? Такой конструктор для map не изучался, и не только для map.

    4) carta geografica – примерно то же самое.

    Подводя итог можно сказать, что это за третий параметр появился при объявлении объекта-контейнера map внутри угловых скобок? Видно по контексту, что он задает порядок сортировки по значению ключа, но достоверной информации нет.

      1. До сих пор нормально было в течении уроков. Прежде чем что-то писать в качестве примера, нужно объяснить что это.

        1. solo “до сих порбыло только потому, что до сих пор было только цветочкизатрагивались только самые-самые элементарные понятия C++. Сейчас описываются уже достаточно продвинутые средства.

        2. Из матлингвистики, теории языков программирования известно, che qualsiasi язык программирования не может быть описан строго последовательно, и поэтому описываются они рекурсивно: используя конструкции, которые ещё не описывались ранее. questo теория.
        Если что-то вам категорически не понятнопропустите это, вы вернётесь к нему позже, при “2-м проходе”, когда оно уже станет понятным.

Lascia un Commento

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