Иллюстрированный самоучитель по Visual Studio .NET

Контейнер типа set

Пары

Парой называется шаблон класса, который хранит пару объектов различного типа. Пара похожа на контейнер в том, что она владеет своими элементами, но она не является контейнером, так как не поддерживает стандартных методов и итераторов, присущих контейнерам. У пары есть два элемента данных (first, second), которые дают возможность манипулировать вложенными объектами. Следующий фрагмент иллюстрирует логику использования пары:

pair<bool, double> result = FindRoot();
if (result.first)
print(result.second);
else
report_error();

Ассоциативные контейнеры используют тип пар _Pairib. Он определяет пару:

pair<iterator, bool>

Первый элемент каждой такой пары является итератором соответствующего типа, а второй – результатом какого-либо действия. Например, метод insert возвращает пару типа _Pairib, анализируя которую вы можете узнать результат вставки (успех или неудача). Рассмотрим пример:

void main ()
{
//========== Массив объектов класса Man
Man ar[] =
{
joy,duke, win, joy,charlie
);
uint size = sizeof (ar) /sizeof (Man);
//========== Создаем множество объектов класса Man
set<Man> s (ar, ar+size); pr(s, "Set of Man");
//========== Ищем объект и удаляем его
set<Man>::iterator p = s.find(joy);
if (p!= s.end())
{
s.erase(p);
cout << "\n\n"<< joy <<" found and erased";
}
pr(s,"After erasure");
//========== Объявляем пару
set<Man>::_Pairib pib;
//========== Пробуем вставить объект
pib = s.insert(joy);
//========== Анализируем результат вставки
cout << "\n\nlnserting: " << *pib.first << "\nResult is: " << pib.second;
//========== Пробуем вставить повторно
pib = s.insert(joy);
cout << "\n\nlnserting: " << *pib.first << "\nResult is: " << pib.second;
//========== Сравниваем ключи
cout << "\n\ns.key_comp() (zoran,count) returned "
<< s.key_comp()(zoran,ar[0]);
cout << "\n\ns.key_comp()(count,zoran) returned "
<< s.key_comp()(ar[0],zoran);
cout <<"\n\n";
}

Приведем результат работы этой программы:

Set of Man # Sequence:
1. Joy Amore, Age: 18
2. Winton Kelly, Age: 50
3. Charlie Parker, Age: 60
4. Duke Ellington, Age: 90

Joy Amore, Age: 18 found and erased After erasure # Sequence:
1. Winton Kelly, Age: 50
2. Charlie Parker, Age: 60
3. Duke Ellington, Age: 90

Inserting: Joy Amore, Age: 18
Result is: 1
Inserting: Joy Amore, Age: 18
Result is: 0
s.key_comp()(zoran,count) returned 0 s.key_comp()(count,zoran) returned 1
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.