Контейнеры STL: Karte. Teil 7




класс Karte c ++, контейнеры STL, Karte für AnfängerWir haben in Betracht gezogen ein einfaches Beispiel für Karte unter<>, aber die Verwendung eines solchen Behälters ist bereits viel kompliziertere Sequenz Behälter. Behälter Karte<> (Tabelle, Anzeige):

  • Es enthält geordnete Paare <Schlüssel,Bedeutung>, wo der Schlüssel und der Wert kann auf beliebige Arten gehören. Für Schlüsseltyp muss vorgegeben werden entweder ein, oder benutzerdefiniert Vergleichsoperation;

  • Elemente mit einer beliebigen Taste Wert sollte einzigartig;

  • Der Versuch hinzufügen (Verfahren einfügen()) ein neues Paar mit einem vorhandenen Schlüssel-Wert Ende der Tabelle Scheitern;

  • Der Betrieb eines neuen Paars in der Tabelle zurückkehrt Hinzufügen Paar Typ <Iterator, bool>, in dem die zweite Komponente (boolean zweite) verweist auf den Erfolg der Operation. wenn es wahr, die erste Komponente des Rückgabewerts (zuerst) Iterator gibt ein zusätzliches Element. Wenn er falsch, kehrt ITERATOR vorhandenes Element mit dem gleichen Schlüssel;

  • Indizierung Tabellenoperationen ( [ ] oder beim() ) erfordern jede Art von Wert als Schlüssel, bestimmte Schlüssel;

  • Indizierung Betrieb beim(), bei der Einstellung der Parameter-Taste, Fehlen in den Tabellenelementen, вызывает Ausnahme;

  • vor, Indexierungsvorgang [ ], bei der Einstellung der Parameter-Taste, Fehlen in den Tabellenelementen, ist die Ausnahme nicht dazu führen,. (umgekehrt, auch wenn die Indexierung einen Antrag auf read-only, fügt к контейнеру новый элемент с требуемым значением ключа, aber nichtig Feldwerte);

Diese Definitionen können komplizierte scheinen, aber es würde den nachfolgenden Beispiel erläutern.

Bevor Sie das Beispiel präsentiert, müssen wir einige Testdatendateien vorbereiten mit assoziative Container zu arbeiten. Die Arbeit ist eine umfangreiche Zeichendaten die Macht der Verwendung von STL-Tabellen zeigt,. Wie wir Textdateien vorbereiten, enthält englischsprachigen Originaltexte mehrere Gedichte von Lewis Carroll.

Nicht ein bisschen komplizierter zu bedienen und russische Texte, aber in diesem Fall müssen Sie arbeiten mit wstring Klassen und lokalisierte Transformationen, es wird nur die Bauschigkeit von Beispielen ohne eine Erhöhung in ihrer Bedeutsamkeit erhöhen.

Ich habe für eine gründliche Prüfung des Codes und nachfolgenden Teile der Präsentation, die Sie ein paar Texte unterschiedlicher Länge gegeben (Dateien werden durch Zählen der Anzahl der Textzeilen dargestellt). es ist, beispielsweise, Humpty-Dumpty.txt - ist der Text Teil VI Humpty-Dumpty «Alice im Wunderland».

30 Bruder und Schwester 11 Humpty Dumpty 34 Jabberwock

Ein Jabberwock.txt - ist der Text Teil VI Humpty-Dumpty «Alice im Wunderland" - bekannt in der russisch-sprachigen Version des Gedichtes (von VS Vysotsky): Über Angst Barmaglota, Sohn! Er Svirn und Wild…

In unserer ursprünglichen (Copyright, Englisch sprechendes, zu debuggen – файл Jabberwock.txt) Dieser Text sieht aus wie:

Jabberwock Twas brillig, und die slithy toves
Hat gyre und wimmelten in Waben:
Alle mimsy waren die Borogove,
Und die mome raths outgrabe.

«Passen Sie das Jabberwock, mein Sohn!
Die Kiefer, die beißen, die Krallen, die fangen!
Hüten Sie sich vor den Jubjub Vogel, und meiden
Die frumious Bandersnatch!» …

Text, sicher, syntaktisch komplex, so dass es ein ausgezeichnetes Material für das Debuggen von Anwendungen. Sie werden für die weitere unabhängige Experimente mit ausgezeichneten Materialien zur Verfügung gestellt!

So ... unsere App wird die Anzahl der Vorkommen von jeder der Buchstaben des Alphabets in dem vorgeschlagenen Text berechnen, Verwendung Karte<>:

Behälter Karte<> - Nicht die beste Option für Ihre Ziele: bei der Suche nach neu Buchstaben im Text werden wir versuchen, es als eine Schlüsseltabelle hinzufügen, aber wenn das Zeichen bereits in der Tabelle vorhanden, der Versuch fehlschlägt. In diesem Fall, nach Ausfälle, wir, der Indexschlüssel, inkrementieren einfach die Anzahl der Vorkommen. Und das ist, was wir lernen können:

класс Karte c ++, контейнеры STL, Karte für Anfänger
Brother_And_Sister.txt
класс Karte c ++, контейнеры STL, Karte für Anfänger
Humpty-Dumpty.txt
класс Karte c ++, контейнеры STL, Karte für Anfänger
Jabberwock.txt

Beachten Sie, wie erhöht Größe der Tabelle nach, wie es war die Indizierung [ ] Umgesetzt Suche (Lesen!) fehlende Schlüssel ('Q', 'Z', 'X').

Die Frage stellt sich: Warum sehen Sie Größe() Werte wie die 44, 47, 50, 52, Wenn wir beobachten, nur das Layout für die Wiederholbarkeit 26 Zeichen von 'a’ до 'z'? Die Antwort ist einfach: weil Leerzeichen können in den Text aufgenommen werden, Zeichensetzung, Großbuchstaben, wir nicht beachten Test in Ausgabe.

Wenn Sie die Vorteile dieser neuen Möglichkeit, C ++ 11-Standard übernehmen, wie die Initialisierung Listen, die Erstellung und Initialisierung der Tabelle kann viel einfacher aussehen:

natürlich, All dies wird nur kompiliert werden, wenn die Compiler-Optionen für die Verwendung von C ++ 11-Standard festlegen:класс Karte c ++, контейнеры STL, Karte für Anfänger

Aus dem Obigen sollte klar sein,, dass jeder Typ kann als Suchschlüssel in einer Tabelle verwendet werden,, immer vorausgesetzt,, für ihn oder gibt es eine natürliche Vergleichsoperation (int, schweben, Schnur, ...), oder wir selbst eine benutzerdefinierte Funktion definieren, die für Vergleiche verwendet werden. Ein paar Möglichkeiten, dies zu tun, sind unten aufgeführt:

Hier sind wir, Ersetzen Schlüsselvergleichsfunktion, ändern Sie die Sortierreihenfolge der Elemente, wenn man sie in der Tabelle platzieren. (In der zweiten Ausführungsform ist ein funktionales Objekt, Funktors, Arbeit, die in einem separaten Teil unserer Überprüfung erörtert wird.)

класс Karte c ++, контейнеры STL, Karte für Anfänger

Newsletter neue Lektionen über die Programmierung:


Ich bin damit einverstanden, Nachrichten zu empfangen von purecodecpp.com auf meine E-Mail

Datum
Seite
Контейнеры STL: Karte. Teil 7
Wertung
5
Öl

Etwa Öl

praktische Erfahrungen über die Softwareentwicklung 40 Jahre. Lehrer Globale Logik internationales Softwareunternehmen. IBM Developer Works Permanent Autor von Publikationen. Wissenschaftliche Herausgeber der Computerliteratur-Verlag "Symbol-Plus", Sankt Petersburg.

8 Gedanken zu "Контейнеры STL: Karte. Teil 7

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

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

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

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

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

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

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

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

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

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

Hinterlasse eine Antwort

Platz Code in Tags: <pre class="lang:c ++ dekodieren:true ">DEIN CODE</Vor>