Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOAP.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
494.59 Кб
Скачать

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

Как и для словаря, элементы в множестве хранятся отсортированными. Повторяющиеся элементы в множество не заносятся.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]