
- •«Объектно-ориентированный анализ и проектирование»
- •1. Принципы ооп. Классы.
- •Описание классов.
- •Объекты класса.
- •Конструкторы
- •Конструктор копирования
- •Статические элементы класса
- •Дружественные функции и классы
- •Деструкторы
- •Перегрузка операций
- •Перегрузка унарных операций
- •Перегрузка бинарных операций
- •Перегрузка операции присваивания
- •Рекомендации по составу классов
- •2. Наследование
- •Ключи доступа
- •Простое наследование
- •Пример замещения функций (практикум)
- •Виртуальные методы
- •Множественное наследование
- •3. Отношения между классами. Диаграммы класссов на языке uml.
- •4. Шаблоны классов.
- •4.1. Определения шаблонов классов Queue и QueueItem
- •4.2. Конкретизация шаблона класса
- •4.3. Аргументы шаблона для параметров-констант
- •4.4. Функции-члены шаблонов классов
- •5. Обработка исключительных ситуаций
- •5.1. Общий механизм обработки исключений.
- •5.2 . Синтаксис исключений
- •5.3. Перехват исключений
- •5.4. Исключения в конструкторах и деструкторах
- •Vector(int n) // Конструктор
- •5.5. Список исключений функции.
- •6. Строки
- •Преобразование строк
- •7. Контейнерные классы
- •7.1. Векторы.
- •7.2. Двухсторонние очереди (deque).
- •7.3. Списки (List).
- •7.4. Стеки
- •7.5. Очереди (queue)
- •7.6. Очередь с приоритетами(priority_queue)
- •8. Ассоциативные контейнеры
- •8.1. Словари (map)
- •8.2. Словари с дубликатами (multimap)
- •8.3. Множества (set)
- •8.4. Множества с дубликатами (multiset)
- •8.5. Битовые множества (bitset)
8.2. Словари с дубликатами (multimap)
Как уже упоминалось, словари с дубликатами (multimap) допускают хранение элементов с одинаковыми ключами. Поэтому для них не определена операция доступа по индексу [ ], а добавление с помощью функции insert выполняется успешно в любом случае. Функция возвращает итератор на вставленный элемент. Элементы с одинаковыми ключами хранятся в словаре в порядке их занесения. При удалении элемента по ключу функция erase возвращает количество удаленных элементов. Функция equal_range возвращает диапазон итераторов, определяющий все вхождения элемента с заданным ключом. Функция count может вернуть значение, большее 1. В остальном словари с дубликатами аналогичны обычным словарям.
#include <iostream>
#include <fstream>
#include <string>
#include <map>
using namespace std;
int main() {
multimap<string, long, less<string> > m1;
ifstream in("phones.txt");
string str;
long num;
while(!in.eof()) {
in >> num;
in.get();
getline(in, str);
ml.insert(make_pair(str, num));
cout << str << ' ' << num << '\n';
}
M1.insert(make_pair("Vasia", 2525257));
multimap<string, long, less<string> > :: iterator i;
for(i = m1.begin(); i != m1.end(); i++)
cout << i->first << ' ' << i->second << '\n';
return 0;
}
антонимы через string
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main() {
map<string, string> m;
int i;
m.insert(pair<string,string>("yes","no")); m.insert(pair<string,string>("good","bad")); m.insert(pair<string,string>("left","right")); m.insert(pair<string, string>("up", "down"));
string s;
cout << "Please enter word: ";
cin >> s;
map<string, string> :: iterator p;
p = m.find(s);
if(p ! = m.end())
cout << "Oppoiste: " << p->second << '\n';
else
cout << "This word isn't been in list\n";
return 0;
}
8.3. Множества (set)
Множество — это ассоциативный контейнер, содержащий только значения ключей, то есть тип value_type соответствует типу Key. Значения ключей должны быть уникальны. Шаблон множества имеет два параметра: тип ключа и тип функционального объекта, определяющего отношение «меньше»:
template <class Key, class Compare = less<Key> > class set{
public:
typedef Key key_type;
typedef Key value_type;
explicit set(const Compare& comp = Compare());
template<class InputIter> set(InputIter first,InputIter last,
const Compare& comp = Compare());
set(const set<Key, Compare>& x);
pair<iterator, bool> insert(const value_type& x);
iterator insert(iterator position, const value_type& x);
template <class InputIter> void insert(InputIter first,InputIter last);
void erase(iterator position);
size_t erase(const key_type& x);
void erase(iterator first, iterator last);
void swap(set<Key, Compare>& x, set<Key, Compare> &y);
void clear();
iterator find(const key_type& x) const;
size_ type count(const key_type& x) const;
iterator lower_bound (const key_type& x) const;
iterator upper_bound(const key_type& x) const;
pair<iterator,iterator> equal_range(const key_type& x) const;
Из описания, приведенного с сокращениями, видно, что интерфейс множества
аналогичен интерфейсу словаря. Ниже приведен простой пример, в котором создаются
множества целых чисел:
#include <iostream>
#include <set>
using namespace std;
typedef set<int, less<int> > set_i;
set_i :: iterator i;
int main(){
int a[4] = {4, 2, 1, 2};
set_i s1;
set_i s2(a, a+4);
set_i s3(s2);
s2.insert(10);
s2.insert(6);
for(i = s2.begin(); i != s2.end(); i++)
cout << *i << ' ';
cout << '\n';
pair <set_i :: iterator, set_i :: iterator> p;
p = s2.equal_range(2);
cout << *(p.first) << ' ' << *(p.second) << '\n';
p = s2.equal_range(5);
cout << *(p.first) << ' ' << *(p.second) << '\n';
return 0;
}
Результат работы программы:
1 2 4 6 10
2 4
6 6
Как и для словаря, элементы в множестве хранятся отсортированными. Повторяющиеся элементы в множество не заносятся.