Сравните производительность программы подсчета слов из параграфа 11.8 по сравнению с программой, не использующей ассоциативного массива. В обоих случаях используйте одинаковый ввод/вывод.
Ну это походу должна быть легкая задачка, да не быть, а есть легкая задачка. По крайней мере понятная более менее.
Щас вам покажу программу из параграфа 11.8, токо там я как бы ее оформил в класс Map но я думаю на производительность это не повлияет вот ее код файл main.cpp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
//programma dl9 podccheta clov //klacc Map na ocnove klacca Assoc #include <iostream> using std::cout; using std::endl; using std::cin; #include <vector> using std::vector; #include <string> using std::string; #include <cstdlib> using std::exit; template<typename C> class Assoc { struct Pair { C name; double val; Pair(C n=" ",double v=0):name(n),val(v){} }; vector<Pair> vec; Assoc(const Assoc&);//private-dl9 predotvracheni9 kopirovani9 Assoc& operator=(const Assoc&);//private-dl9 predotvracheni9 kopirovani9 int index; public: Assoc():index(0){} const double& operator[](const C&); double& operator[](C&); void print_all() const; double operator*() { //cout <<"mu v razumenovanii"<<endl; typename vector<Pair>::iterator p=vec.begin(); p+=index; return p->val; } double operator++() { typename vector<Pair>::iterator p=vec.begin(); index++; p+index; return p->val; } void begin() { index=0; } bool end() { //cout <<endl<<vec.size()<<' '<<index<<endl; if(index==vec.size()) return false; return true; } }; template<typename C> double& Assoc<C>::operator[](C& s) { for(typename vector<Pair>::iterator p=vec.begin();p!=vec.end();++p) if(s==p->name)return p->val; vec.push_back(Pair(s,0));//nachal6noe znachenie 0 return vec.back().val;//vozvrat poclednego elementa } template<typename C> void Assoc<C>::print_all() const { for(typename vector<Pair>::const_iterator p=vec.begin();p!=vec.end();++p) cout <<p->name<<" : "<<p->val<<'\n'; } //cozdaem klacc Map na ocnove Assoc template<typename C> class Map : public Assoc<C> { public: Map(){} }; int main() { string buf; Map<string> vec; while(cin >>buf) { vec[buf]++; vec.print_all(); } return 0; } |
Так с ней мы разобрались, а теперь нам нужно построить вручную программу для подсчета слов, то есть на обычных функциях, та я даже не знаю как сказать просто взять предложение разбить его на слова записать уникальные слова в массив строк, затем проверить частоту встречи того или иного слова и записать в int массив эту частоту. Как то так. Ну впринципе задача предельно ясна. Поехали.
Как окозалось простенькая программка и быстро я ее сделал. Файл main2.cpp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
//programma dl9 podcheta clov bez acociativnogo macciva #include <iostream> using std::cout; using std::endl; using std::cin; #include <string> using std::string; int main() { //string s="hellow world gacpada hellow"; string s; int mass[200]={0}; string massS[200]; while(cin >>s) { //cout <<s<<endl; int flag=0; int i=0; for(;massS[i]!="";i++) { if(massS[i]==s) { mass[i]++; //naideno covpadenie flag++; } } if(flag==0) { massS[i]=s; mass[i]++; } //vuvod rezyl6tatov for(i=0;massS[i]!="";i++) { cout <<massS[i]<<' '<<mass[i]<<endl; } } return 0; } |
Производительность мне конечно не охота проверять. Да я думаю она будет примерно одинаковой язык то быстрый, да и для тех программ которые как бы я пишу, я вообще гамно программки пишу мелочь, короче не стоящие, да и уровень так сказать мой низки. Так что производительность для меня можно сказать на последнем месте. Щас посмотрим решусь ли я проверить производительность.? Мб щас и проверим это не сложно. Даже если честно интересно проверить.
Да не будем мы проверять производительность это ни к чему.
[youtube]http://www.youtube.com/watch?v=tl72gGg3IyA[/youtube]