2 :
template
struct ReverseSort
{
bool operator()(const KeyType& keyl, const KeyType& key2)
{
return (keyl > key2);
}
10: };
1 1 :
int main ()
{
usingnamespacestd;
16: //карта имультикарта ключей типа int со значениями типа string
464 ЗАНЯТИЕ 20. Классы карт библиотеки STL
mapcint, string> mapIntToStringl;
multimap mmapIntToStringl;
// карта и мультикарта создаются как копия другого контейнера
mapcint, string> mapIntToString2(mapIntToStringl);
multimapcint, string> mmapIntToString2(mmapIntToStringl);
23:
// карта и мультикарта создаются как часть другого контейнера
mapcint, string> mapIntToString3(mapIntToStringl.cbegin(),
26:
|
mapIntToStringl.cend());
|
27:
|
|
multimapcint, string> mmapIntToString3(mmapIntToStringl.cbegin(),
29:
|
mmapIntToStringl.cend()) ;
|
30:
|
|
// карта и мультикарта с предикатом сортировки в обратном порядке
mapcint, string, ReverseSortcint> > mapIntToString4
(mapIntToStringl.cbegin(), mapIntToStringl.cend());
34:
multimapcint, string, ReverseSortcint> > mmapIntToString4
(mapIntToStringl.cbegin(), mapIntToStringl.cend());
return 0;
}
Анализ
Для начала сосредоточимся на строках 12-39 функции m ain (). Простейшие карта и мультикарта целочисленных ключей и строковых значений создаются в строках 21 и 22. Строки 25-28 демонстрирую т создание карты или мультикарты, инициализированных диапазоном значений из других контейнеров. Строки 31-36 демонстрирую т создание экземпляров карты и мультикарты с собственным критерием сортировки. Обратите вни мание, что сортировка по умолчанию (в предыдущих экземплярах) использует предикат s t d : : lessC T > , который сортировал бы элементы в порядке возрастания. Если вы хотите изменить это поведение, предоставьте предикат, который является классом или структу рой, реализующей оператор o p e r a t o r (). Такая структура предиката R e v e r s e S o r t нахо дится в строках 4 -10 и используется при создании экземпляра карты в строке 32 и муль тикарты в строке 35.
СОВЕТ
|
Не будет ли ошибки компиляции при использовании методов c b e g in ()
|
и cen d о?
|
|
|
Если вы попытаетесь откомпилировать эту программу, используя компилятор
|
|
не совместимый со стандартом 0 + 1 1 , задействуйте методы begin () и end ()
|
|
вместо cbegin () и cend () соответственно. Методы cbegin () и cend () до
|
|
ступны только в 0 + 1 1 , они возвращают константный итератор, который не мо
|
|
жет быть использован для изменения элементов.
|
Простые операции с классами std::map и std::multimap библиотеки STL
|
465
|
Вставка элементов в карту или мультикарту библиотеки STL
Большинство функций карты и мультикарты работают одинаково. Они получают по добные параметры и возвращают значения подобных типов. Для вставки элементов в кон тейнеры обоих видов используется функция-член i n s e r t ():
std::map mapIntToStringl;
вставить пару ключа и значения с использованием функции make_pair() mapIntToString.insert (make_pair (-1, "Minus One"));
Поскольку элементы этих двух контейнеров содержат пары “клю ч-значение”, вы мо жете также непосредственно вставлять инициализированные пары s t d : : p a ir :
mapIntToString.insert (pair (1000, "One Thousand"));
качестве альтернативы можете использовать для вставки синтаксис, как у массива, ко торый привычен пользователю и поддерживается оператором индексирования o p e r a to r [ ]:
Do'stlaringiz bilan baham: |