Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

C++. Энциклопедия пользователя - Либерти Дж.

Либерти Дж. C++. Энциклопедия пользователя — Москва, 2001. — 581 c.
Скачать (прямая ссылка): enciklopediyapolzovatelya2001.djvu
Предыдущая << 1 .. 80 81 82 83 84 85 < 86 > 87 88 89 90 91 92 .. 280 >> Следующая

{return mStockLevel;} {return mPrice;
friend ostreamS -operator« (ostreamS os, Products p)
os « "Product: " « p.mName « "\tPrice: " « p.mPrice « "\tStock on hand: " « p.mStockLevel; return os,
r
private.
string .nName.
int oStockLevel,
double BPrice:
} г
int main О {
Product ?en("Pen" 5 39, 58) ,
Product FableLamp("Table Lamp", 28.49, 24); Product Speaker("Speaker", 24 95, 40);
map<str.ing, Product» productMap ; productMap ' Pen GetNameO] = Pen ; productMap[TableLamp.GetNameО] = TableLamp; productMap[Speaker.GetNameОi = Speaker;
cout « 'Speaker s price is return 3,
« productMap["Speaker" ] .GetPrice () « '\n"
Вывод из листинга St.] показан ниже:
Speaker's price is 24.95
В листинге 6.13 показана важная характеристика контейнерного класса тар: доступ к элементам записи можно получить по ключевым значениям. Это подразумевает, что контейнер тар должен иметь класс Key. Контейнерный класс тар должен также уметь сравнивать ключевые значения, используя либо встроенные операторы сравнения класса Key, либо внешний объект сравнения. Как и ожидается, контейнер тар действительно имеет класс Key, который обеспечивает данный механизм:
template<class Key, class Т, class Compare = less<Key>, class A = AllocatorCT» class map
(
/ / типы
typedef Compare key_compare;
typedef A allocator_type;
typedef typename A: :deference_type difference_type;
typedef typename A::reference
reference;
Контейнерные классы библиотеки STL 1 10 I
Глава 6 ¦ 1о1
typedef typename A:;const_reference const_reference.
Первый аргумент Key является типом ключей для записи, второй — типом шачения элемента. В примере шписи Product ключом является идентификатор продукта типа string, а значением элемента — тип Product. Третий аргумент является классом Compare, который можно использовать для сравнения значений двух ключей. Четвертый аргумент А — эго распределитель, который заботится об управлении памятью контейнеров. В большинстве случаев он должен быть адекватным Allocator<T> по умолчанию. Мар содержит последовательность тар ключ/значение, где каждый ключ уникален. Это позволяет осуществить точное распределение элементов в записи. Кроме того, вы должны уметь отсортировать элементы в записи согласно их ключевым значениям. Если не указывать класс Compare, го будет использоваться функция сравнения <. Оператор < можно перегрузить для сравнения двух объектов вашего класса. В примере Product для срав-г!ения идентификаторов продуктов используется operator<(string, string). Если вы решите упорядочить список продуктов по наименованиям, то можете определить класс Compare л обеспечить его шписью Product. Более подробно определение класса сравнения описано в главе 7.
Конструкторы и деструктор
Следующий фрагмент программного кода показывает конструкторы и деструктор для контейнерного класса тар:
templateCclass iCey; class Т, class Compare = less<Key>, class A = Allocator<T>>
class шар
{
// конструкторы и деструктор 1/ создать аустую запись
axpi-LCxt map * const Compare® cmp = Compare 0 , const = Л )>
' создать мар и копировать с первого по предпоследний элементы из Inputlterator "emplataCclass InputIterator> парInput I terator first, Inputlterator Last,
const Compares cmp « Compare () , const A& -
// конструктор копии map(const map& m) ;
! * деструктор -map {
/ оператор приев айв ания map* operator=(const map&;,
} ¦
Конструктор-член создает объект map с исходным классом Compare и, или классом распределителя. (Сейчас мы не будем затрагивать шаблонный конструктор, поскольку он вовлекает вводной итераторный класс. Итераторы рассматриваются в этой главе далее.) Конструктор копии, деструктор и оператор присваивания являются стандартными.
Размеры
Как и последовательные контейнеры, класс тар обеспечивает несколько функции-членов, касающихся определения размеров записи:
template<class Key, class Т, class Compare — less<Key> class A = Allocator<T>>
class map
{
public:
// типы
typedef typename A::size_Jtype sJ-ze_type
// размеры
size_type size О const; // количество элементов
size_type max_size() const; // размер наибольшего
bool empty() const { return (size() == 0) ; }
Все эти операции аналогичны операциям в классе vector
182
Вопросы реализации
Часть II
Итераторы
Как и другие стандартные контейнеры, записи можно пересекать, используя итераторы:
templateCclass Key, class Т, class Compare = less<Key>, class A = AllocatorCT» class map {
public:
// типы
typedef Key key_type;
typedef T mapped_type;
typedef (implementation defined) iterator;
typedef (implementation defined) const_iterator;
typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
// итераторы
iterator begin(); // указывает на первый элемент
const_iterator begin() const;
iterator end(); // указывает на (последний + 1) элемен
const_iterator end() const;
// указывает на первый элемент реверсированной последовательности reverse_iterator rbegin();
const_reverse_iterator rbeginO const;
Предыдущая << 1 .. 80 81 82 83 84 85 < 86 > 87 88 89 90 91 92 .. 280 >> Следующая