word += tolower(ch); in.get(ch); }while (!in.fail() && (isalpha(ch) || ch == '_')); if (in.fail()) return false; in.putback(ch); // Егер символ - '\n' return true; } int main(){ map_ss m; map_ss::iterator im; set_i::iterator is, isbegin, isend; string word; int num = 1; ifstream in ("some_fi le"); if (!in){cout << "Cannot open input fi le.\n";
exit(1); } while (wordread(in, word, num)){ im = m.fi nd(word); if (im == m.end()) im = m.insert(map_ss::value_type(word, set_i())).fi rst; (*im).second.insert(num); } for (im = m.begin(); im != m.end(); im++){ cout << setiosfl ags(ios::left) << setw(15)
<< (*im).fi rst.c_str(); isbegin = (*im).second.begin(); isend = (*im).second.end(); for (is = isbegin; is != isend; is++) cout << " " << *is; cout << endl; } return 0; } Some_fi le кіріс файлында келесі мəтін бар делік:
354 class value_compare: public binary_function bool> { friend class map; protected: Compare comp; value_compare(Compare c) : comp(c) {} public: bool operator() (const value_type& x, const value_type& y) const { return comp(x.fi rst, y.fi rst);} }; Мұнда программа экранға келесі нəтижені шығарады:
binary_function 2 bool 2 6 c 5 class 1 3 comp 4 5 8 compare 4 5 const 7 fi rst 8 friend 3 map 3 operator 6 protected 3 public 2 5 return 8 value_compare 1 5 value_type 2 7 x 7 8 y 7 8 Программаның жұмысын толығырақ қарастырайық. Мысалдағы
wordread функциясы кіріс файлдан кезекті сөзді оқиды жəне ағымдағы
жолдың нөмірін қалыптастырады, мұнда сөздің құрамына алфавиттік-
цифрлық символдар мен астын сызу белгісі болуы мүмкін деп есептеледі.
Құрылатын нұсқауыш «жол – жиын» жұптарынан тұратын сөздікте
сақталады. Жол кілт болып табылады, мұнда кіріс файлдан алынған бір сөз
сақталады. Бүтін сандар жиыны осы сөз кездесетін жолдардың нөмірлерін
сақтайды. Жиын да, сөздік те біздің қатысуымызсыз жылдам іздеуді жəне
элементтерді дубликаттарсыз (көшірмелерсіз) реттелген түрде сақтауды
қамтамасыз етеді.
Əрбір сөз үшін
fi nd функциясының көмегімен оның сөздікте бар
екендігі тексеріледі. Егер жоқ болса (функция
end() қайтарды), сөздікке
insert функциясының көмегімен осы сөзден жəне бос жиыннан (
set_i()
355 конструкторын шақыру) тұратын жұп қосылады. Осы