Д. Стефенс - C++. Сборник рецептов

Здесь есть возможность читать онлайн «Д. Стефенс - C++. Сборник рецептов» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2007, ISBN: 2007, Издательство: КУДИЦ-ПРЕСС, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

C++. Сборник рецептов: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «C++. Сборник рецептов»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Данная книга написана экспертами по C++ и содержит готовые рецепты решения каждодневных задач для программистов на С++. Один из авторов является создателем библиотеки Boost Iostreams и нескольких других библиотек C++ с открытым исходным кодом. В книге затрагивается множество тем, вот лишь некоторые из них: работа с датой и временем; потоковый ввод/вывод; обработка исключений; работа с классами и объектами; сборка приложений; синтаксический анализ XML-документов; программирование математических задач. Читатель сможет использовать готовые решения, а сэкономленное время и усилия направить на решение конкретных задач.

C++. Сборник рецептов — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «C++. Сборник рецептов», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

for (map iterator p = strMap.begin();

p != strMap.end(); ++p)

cout << "English: " << p->first

<< ", German: " << p->second << endl;

Ключ хранится в first, а значение хранится в second.

Однако это не объясняет, почему я использовал make_pair. make_pair— это вспомогательный шаблон функции, который создает объект pairна основе двух переданных в него аргументов. Некоторые предпочитают этот подход вызову конструктора pair, так как шаблон класса не может догадаться о типах своих аргументов, в то время как шаблон функции может. Таким образом, эти две строки кода функционально эквивалентны.

strMap.insert(std::make_pair("Sunday", "Sonntag"));

strMap.insert(std::pair("Sunday", "Sonntag"));

mapне допускает наличия дублирующихся ключей. Если требуется разрешить дублирование ключей, следует использовать multimap, который является map, разрешающим наличие несколько одинаковых ключей. Его интерфейс идентичен map, но поведение методов в необходимых случаях отличается. В табл. 6.1 приведен перечень методов, которые есть в одном, но отсутствуют в другом, и пояснения различий в поведении общих методов, map и multimapсодержат несколько typedef, которые описывают различные значения, хранящиеся в них. В табл. 6.1 они используются следующим образом:

key_type

Это тип ключа. В string map,объявленном как map, key_typeдолжен быть string.

mapped_type

Это тип значения, на которое отображается ключ. В string map, объявленном как map, mapped_typeдолжен быть MyClass*.

value_type

Это тип объекта, содержащего ключ и значение, которой, применительно к mapи multimap, является pair.

Табл. 6.1. map и multimap

Метод map, multimap или оба Поведение
T& operator[] (const key_type& k) map Возвращает ссылку на объект значения, сохраненный с ключом k. Если kв map отсутствует, то он добавляется, а объект значения создается с помощью конструктора по умолчанию
iterator insert(const value_type& v) pair insert(const value_type& v) Оба Первая версия вставляет vв multimapи возвращает итератор, который указывает на вставленную пару pair. Вторая версия вставляет vи mapпри условии, что в mapеще не содержится ключа, равного v. Возвращаемая pairсодержит итератор который указывает на вставленную pair, если произошла вставка, и bool, указывающий, была ли вставка успешной
iterator find(const key_type& k) Оба Возвращает итератор или const_iterator, который указывает на mapped_type, соответствующий k. В multimapне гарантируется, что возвращаемый итератор будет указывать на первое значение, соответствующее k. Если ключа, равного k, нет, то возвращаемый итератор равен end()

Также табл 6.1 показывает разницу в поведении между mapи multimap.

Если operator[]вам не подходит, т.е. другой способ найти ключ в map. Для этого можно использовать метод find.

map::const_iterator p

= strMap.find("Thursday");

if (p != strMap.end())

cout << "Thursday = " << p->second << endl;

Но не забудьте, что при использовании multimapне гарантируется, что возвращаемый элемент будет первым элементом с ключом, равным искомому. Если нужен первый элемент, чей ключ не меньше определенного значения или не больше определенного значения, используйте lower_boundили upper_bound. lower_boundвозвращает итератор, указывающий на первую пару ключ/значение, равную или большую, чем аргумент key_type. Другими словами, если ваш mapсодержит дни недели, как в примере 6.6, следующий код вернет итератор, который указывает на пару, содержащую "Friday"и "Freitag".

p = strMap.lower_bound("Foo");

if (p != strMap.end())

cout << p->first << " = " << p->second << endl;

Это происходит благодаря тому, что первый ключ больше или равен "Foo". upper_boundработает аналогично, но с противоположным условием.

В начале этого обсуждения я упоминал, что элементы в map хранятся в отсортированном по ключам порядке, так что при переборе от beginдо endкаждый элемент будет «больше», чем предшествующий (а в multimap— больше или равен ему) Но при использовании более сложных ключей, чем stringили числа, может потребоваться указать, как при вставке элементов в отображение следует сравнивать ключи.

По умолчанию ключи хранятся с помощью стандартного функтора less(объявленного в ). less— это двоичная функция (принимает два аргумента одинакового типа), которая возвращает bool, указывающий на то, больше ли первый аргумент, чем второй, или нет. Другими словами, less(a, b)возвращает a < b. Если это не то, что вам требуется, создайте свой собственный функтор и объявите mapс его помощью. Например, если в качестве ключа используется объект Personи каждый Personимеет имя и фамилию, то может потребоваться сравнивать фамилии и имена. Пример 6.7 показывает способ сделать это.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «C++. Сборник рецептов»

Представляем Вашему вниманию похожие книги на «C++. Сборник рецептов» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «C++. Сборник рецептов»

Обсуждение, отзывы о книге «C++. Сборник рецептов» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.