bool operator!=(const myclass &o1, const myclass &o2)

{

 return o1.sum != o2.sum;

}

int main()

{

 int i;

 // Создание первого списка.

 list lst1;

 for(i=0; i <10; i++) lst1.push_back(myclass(i, i));

 cout << "Первый список: ";

 list::iterator p = lst1.begin();

  while(p != lst1.end()) {

  cout << p->getsum() << " ";

  p++;

 }

 cout << endl;

 // Создание второго списка.

 list lst2;

 for(i=0; i<10; i++) lst2.push_back(myclass(i*2, i*3));

 cout << "Второй список: ";

 p = lst2.begin();

 while(p != lst2.end()) {

  cout << p->getsum() << " ";

  p++;

 }

 cout << endl;

 // Теперь объединяем списки lst1 и lst2.

  lst1.merge(lst2);

 // Отображаем объединенный список.

 cout << "Объединенный список: ";

 р = lst1.begin();

 while(p != lst1.end()) {

  cout << p->getsum() << " ";

  p++;

 }

 return 0;

}

Эта программа создает два списка объектов типа myclass и отображает их содержимое. Затем выполняется объединение этих двух списков с последующим отображением нового содержимого результирующего списка. Итак, программа генерирует такие результаты.

Первый список: 0 2 4 6 8 10 12 14 16 18

Второй список: 0 5 10 15 20 25 30 35 40 45

Объединенный список: 0 0 2 4 5 6 8 10 10 12 14 15 16 18 20 25 30 35 40 45

Отображения 

Отображениеэто ассоциативный контейнер.

Класс map поддерживает ассоциативный контейнер, в котором уникальным ключам соответствуют определенные значения. По сути, ключ — это просто имя, которое присвоено некоторому значению. После того как значение сохранено в контейнере, к нему можно получить доступ, используя его ключ. Таким образом, в самом широком смысле отображение — это список пар "ключ-значение". Если нам известен ключ, мы можем легко найти значение. Например, мы могли бы определить отображение, в котором в качестве ключа используется имя человека, а в качестве значения — его телефонный номер. Ассоциативные контейнеры становятся все более популярными в программировании.

Как упоминалось выше, отображение может хранить только уникальные ключи. Ключи-дубликаты не разрешены. Чтобы создать отображение, которое бы позволяло хранить неуникапьные ключи, используйте класс multimap.

Контейнер map имеет следующую шаблонную спецификацию.

template , class Allocator =allocator > >class map

Здесь Key— тип данных ключей, T— тип сохраняемых (отображаемых) значений, а Comp — функция, которая сравнивает два ключа. По умолчанию в качестве функции сравнения используется стандартная функция-объект less. Элемент Allocator означает распределитель памяти, который по умолчанию использует стандартный распределитель allocator.

Класс map имеет следующие конструкторы.

explicit map(const Comp &cmpfn = Comp(), const Allocator &a = Allocator());

map(const map &ob);

template map(InIter start, InIter end, const Comp &cmpfn = Comp(), const Allocator &a = Allocator());

Первая форма конструктора создает пустое отображение. Вторая предназначена для создания отображения, которое содержит те же элементы, что и отображение ob. Третья создает отображение, которое содержит элементы в диапазоне, заданном итераторами start и end. Функция, заданная параметром cmpfn (если она задана), определяет характер упорядочения отображения.

В общем случае любой объект, используемый в качестве ключа, должен определять конструктор по умолчанию и перегружать оператор "<" (а также другие необходимые операторы сравнения). Эти требования для разных компиляторов различны.

Для класса map определены следующие операторы сравнения:

==, <, <=, !=, > и >=

Функции-члены, определенные для класса map, представлены в табл. 21.4. В их описании под элементом key_type понимается тип ключа, а под элементом value_type — значение выражения pair.

Пары "ключ-значение" хранятся в отображении как объекты класса pair, который имеет следующую шаблонную спецификацию.

template

struct pair {

Перейти на страницу:

Все книги серии Изучайте C++ с профессионалами

Похожие книги