Якщо ми візьмемо версію алгоритму sort(), що має два аргументи
sort(vectPtrsPers.begin(),vectPtrsPers.end() );
то будуть сортуватися тільки вказівники за їх адресами в пам’яті. Таке сортування потрібне вкрай рідко. Щоб впорядкувати об’єкти person за їх іменами, ми скористаємося алгоритмом sort() з трьома аргументами. В якості третього аргументу буде виступати функціональний об’єкт comparePersons()
sort(vectptrspers.begin(),vectptrspers.end(),comparePersons());
Що стосується нашого власного функціонального об’єкту comparePersons(), то його ми визначаємо так:
//функціональний обєкт для порівняння вмісту
class comparePersons
{public:
bool operator() (const person* ptrp1,
const person* ptrp2) const
{return *ptrp1<*ptrp2; }
};
При цьому operator() має два аргументи, що є вказівниками на персональні дані і порівнює значення їх вмісту, а не просто значення вказівників.
Функціональний об’єкт displayPerson()
В даній програмі незвичайно здійснюється виведення вмісту контейнеру. Замість протої ітерації з поедементним виводом ми використовуємо функцію for_each() з власним функціональним об’єктом в якості третього аргументу:
for_each(vectptrspers.begin(),vectptrspers.end(),
displayPerson());
Цей вираз приводить до того, що функціональний об’єкт displayPerson() виводиться для кожного елементу даних у векторі. Ось як виглядає об’єкт displayPerson:
//функціональний обєкт для виводу персональних даних
//збережених у вказівниках
class displayPerson
{public:
void operator() (const person* ptrp) const
{ptrp->display(); }
};
Таким чином, за допомогою одного-єдиного виклику функції на екран виводиться вміст всього вектора.