Язык программирования C++ для профессионалов



Ассоциативный массив - часть 5


hammer 2 nail 100 saw 3 saw 4 hammer 7 nail 1000 nail 250

Нужно отсортировать список так, чтобы значения, соответствующие одному предмету, складывались, и напечатать получившийся список вместе с итоговым значением:

hammer 9 nail 1350 saw 7 ------------------- total 1366

Вначале напишем функцию, которая читает входные строки и заносит предметы с их количеством в таблицу. Ключом в этой таблице является первое слово строки:

template<class K, class V> void readlines(Map<K,V>&key) { K word; while (cin >> word) { V val = 0; if (cin >> val) key[word] +=val; else return; } }

Теперь можно написать простую программу, вызывающую функцию readlines() и печатающую получившуюся таблицу:

main() { Map<String,int> tbl("nil",0); readlines(tbl);

int total = 0; for (Mapiter<String,int> p(tbl); p; ++p) { int val = p.value(); total +=val; cout << p.key() << '\t' << val << '\n'; }

cout << "--------------------\n"; cout << "total\t" << total << '\n'; }




Содержание  Назад  Вперед