Контейнеры STL: carte. partie 7

Noter cet article




carte класс c ++, контейнеры STL, carte pour les débutantsNous avons examiné un exemple simple d'utilisation carte<>, mais l'utilisation d'un tel récipient est déjà beaucoup plus compliqué conteneur de séquence. récipient carte<> (table, afficher):

  • Il contient des paires ordonnées <clé,sens>, où la clé et la valeur peuvent appartenir à des types arbitraires. Pour le type de clé doit être soit un prédéterminé, ou défini par l'utilisateur opération de comparaison;

  • Les éléments ayant une valeur clé doivent être unique;

  • Tentative d'ajout (méthode insérer()) de déposer une nouvelle paire avec une extrémité de la valeur clé existante échec;

  • Le fonctionnement de l'ajout d'une nouvelle paire dans les déclarations de table paire type <iterator, bool>, dans lequel le deuxième composant (booléen seconde) des points à la réussite de l'opération. Si elle vrai, la première composante de la valeur de retour (premier) iterator donne un élément ajouté. S'il faux, est retourné iterator entrée existante avec la même clé;

  • opération d'indexation de table ( [ ] ou à() ) exiger tout type de valeur que la clé, pour certains clés;

  • indexation de fonctionnement à(), lors de la configuration des paramètres clés, Absence dans le tableau des éléments, les causes exception;

  • devant, opération d'indexation [ ], lors de la configuration des paramètres clés, Absence dans le tableau des éléments, l'exception ne cause pas. (inversement, même si l'indexation a demandé en lecture seule, ajoute un élément de récipient avec une nouvelle valeur de clé souhaitée, mais avec nul valeurs de champ);

Ces définitions peuvent sembler alambiquée, mais il expliquerait l'exemple ultérieure.

Avant d'exemples présentant, nous devons nous préparer des fichiers de données de test pour travailler avec des conteneurs associatifs. Le travail est une donnée de caractère volumineux démontre la puissance de l'utilisation des tables de la STL. Comme nous préparons les fichiers de données de texte, contenant de langue anglaise des textes originaux de plusieurs poèmes de Lewis Carroll.

textes Pas un peu plus compliqués à utiliser et russes, mais dans ce cas, vous devez travailler avec classes wstring et des transformations localisées, qui ne fera qu'augmenter l'encombrement des exemples, sans augmenter leur signifiance.

Je vous ai donné quelques textes de longueurs différentes pour un test complet du code et les parties suivantes de la présentation (les fichiers sont affichés avec le comptage du nombre de lignes de texte). ici, par exemple, Humpty-Dumpty.txt — это текст из части VI Humpty-Dumpty «Алиса в зазеркалье».

30 Frère et soeur 11 Chose impossible à réparer 34 Jabberwock

А Jabberwock.txt — это текст из части VI Humpty-Dumpty «Алиса в зазеркалье» — известное в русскоязычном варианте стихотворение (в исполнении В.С.Высоцкого): A propos de la peur Barmaglota, fils! il Svirn et sauvage…

Dans notre origine (droit d'auteur, Anglophone, à déboguer – файл Jabberwock.txt) Ce texte ressemble:

Jabberwock Twas brillig, et les toves slithy
Est-ce gyre et vriblaient:
Enmîmés étaient les Borogove,
Et les raths horsgrave.

«Méfiez-vous Jabberwock, mon fils!
Les mâchoires qui mordent, les griffes qui attrapent!
Méfiez-vous l'oiseau Jube, et shun
Le frumious Bandersnatch!» …

texte, sans aucun doute, complexe syntaxiquement, ce qui en fait un excellent matériau pour les applications de débogage. Vous disposez avec d'excellents matériaux pour de nouvelles expériences indépendantes!

Alors ... notre application calcule le nombre d'occurrences de chacune des lettres de l'alphabet dans le texte proposé, en utilisant carte<>:

récipient carte<> - pas la meilleure option pour atteindre vos objectifs: lorsque le nouveau lettres dans le texte que nous allons essayer de l'ajouter comme une table clé, mais si cette lettre est déjà présent dans le tableau, la tentative échoue. Dans ce cas,, après échec, nous, la clé d'index, simplement augmenter le nombre de ses occurrences. Et c'est ce que nous pouvons apprendre:

carte класс c ++, контейнеры STL, carte pour les débutants
Brother_And_Sister.txt
carte класс c ++, контейнеры STL, carte pour les débutants
Humpty-Dumpty.txt
carte класс c ++, контейнеры STL, carte pour les débutants
Jabberwock.txt

Remarquez comment augmentation taille de la table après, comment il a été l'indexation [ ] recherche mis en œuvre (lecture!) clés manquantes (« Q », 'Z', 'X').

La question se pose: Pourquoi voyez-vous Taille() des valeurs telles que le 44, 47, 50, 52, Si on ne voit que la mise en page de la reproductibilité 26 personnages de « a’ до 'z'? La réponse est simple: parce que les caractères de l'espace peuvent être inclus dans le texte, ponctuation, lettres majuscules, nous ne voyons pas dans l'émission essai.

Si vous profitez de cette nouvelle occasion de 11 standard C ++, que la liste d'initialisation, la création et l'initialisation de la table peuvent sembler beaucoup plus facile:

naturellement, всё это станет компилироваться только при указании опций компилятора для использования стандарта C++11:carte класс c ++, контейнеры STL, carte pour les débutants

Из сказанного уже должно быть понятно, что в качестве ключа поиска в таблице может использоваться любой тип, при обязательном условии, что для него либо определена естественная операция сравнения (int, flotte, chaîne, ...), либо мы сами определим такую пользовательскую функцию, которая будет использоваться для сравнений. Несколько способов сделать это показаны ниже:

Здесь мы, сменив функцию сравнения ключей, modifier l'ordre de tri des éléments lorsque vous les placez dans le tableau. (Dans le deuxième mode de réalisation, un objet fonctionnel, foncteur, travail qui sera discuté dans une partie séparée de notre examen.)

carte класс c ++, контейнеры STL, carte pour les débutants

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.

8 réflexions sur "Контейнеры STL: carte. partie 7

  1. Nous avons un article intéressant et compréhensible.
    Et à suivre – enlèvement, remplacement, contient, Recherche par clé, et d'autres.?

  2. Nous vous remercions de l'incroyable travail et de l'aide dans l'apprentissage C ++, mais maintenant allé neponyatki. Jusqu'à présent, il était normal pendant les cours. Avant d'écrire quelque chose comme un exemple, pour l'expliquer. autrement, si l'échantillon est pas clair, alors il n'y a pas de sens de l'apprentissage, Seule la pratique mémorisée et assimilés. Ladny symbole neupomyanutыy ^ Z (ctrl-Z) incapable de voir dans l'image le résultat du programme de travail avec les versets de la console et bien, si le lecteur sait, cela signifie la fin du fichier pour la console, sans entrer dans le programme ne fonctionnerait pas (цикл не завершился бы). Но в следующем примере пошло еще тяжелее .

    1) функторы не изучались, что это неизвестно и пример понять невозможно, потому что там написано bool operator(), а мы так не делали ни разу, après que l'opérateur de mot avant que les parenthèses opérateur signe toujours écrit (+, -, …). bon, vous pourriez penser, que signifiait probablement ce signe, qui se trouve dans l'expression après le retour. А в следующих строчках еще более непонятно:

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

    3) carte MG1(génial); – on ne sait pas. Vous pouvez imaginer dans un sens ou dans un autre, seulement des suppositions sont peu utiles dans ce cas. MG1(génial) – un constructeur avec une fonction de paramètres? Un tel concepteur de carte n'a pas été étudiée, et non seulement pour la carte.

    4) carte – sur le même.

    en résumé, ce qui est le troisième paramètre apparaît sous la carte objet Ad-conteneur entre crochets d'angle? Il est évident à partir du contexte, il spécifie l'ordre de tri valeur de clé, mais il n'y a pas d'informations fiables.

      1. Jusqu'à présent, il était normal pendant les cours. Avant d'écrire quelque chose comme un exemple, pour l'expliquer.

        1. juste “encore” était seulement parce que, que jusqu'à présent il n'y avait que des fleurs – adressée uniquement les plus-les concepts les plus fondamentaux de C ++. Maintenant, décrit déjà suffisamment de fonds avancés.

        2. de matlingvistika, théorie des langages de programmation connue, que tout langage de programmation ne peut pas Il est décrit strictement séquentielle, et par conséquent, ils sont décrits récursive: en utilisant la conception, qui n'a pas été décrit précédemment. cette théorie.
        S'il y a quelque chose que vous ne comprenez pas tout à fait – manquer, vous revenez à plus tard, à “2-m passage”, quand il est devenu clair.

Laisser un commentaire

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