Определите шаблонную функцию sort(), принимающую критерий сравнения в качестве шаблонного аргумента. Определите класс Record с двумя полями — count и price. Выполните сортировку vector<Record> по каждому полю.
Написал я шаблон функции sort() по обычной не помню как вид сортировки называется, двумя циклами короче. Той сортировкой которая по производительности такая как и все не лучшая. Вот код файла 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 100 |
//wablonna9 fynkci9 sort #include <iostream> using std::cout; using std::endl; #include <vector> using std::vector; #include <cstdlib> using std::srand; using std::rand; using std::exit; #include <ctime> using std::time; /*template<class T, int max> T& lookup(Buffer<T,max>&b, const char* p); class Record { const char v[12]; }; Record& f(Buffer<Record,123>&buf, const char* p) { return lookup(buf,p);//vuzvat6 lookup(), gde T ect6 Record, a i-128 }*/ template<typename T> void sort(vector<T>& vec,int a) { cout <<"sort"<<endl; if(a==0) for(int i=0;i<vec.size();i++) { for(int j=i+1;j<vec.size();j++) { if(vec[i].count<vec[j].count) { T temp=vec[i]; vec[i]=vec[j]; vec[j]=temp; } } } else { for(int i=0;i<vec.size();i++) { for(int j=i+1;j<vec.size();j++) { if(vec[i].price<vec[j].price) { T temp=vec[i]; vec[i]=vec[j]; vec[j]=temp; } } } } } struct Record { int count; int price; Record():count(0),price(0){}; Record(int a,int b):count(a),price(b){}; }; int main() { srand(time(0)); vector<Record> v(5); for(int i=0;i<v.size();i++) { v[i].count=1+rand()%5; v[i].price=1+rand()%5; } for(int i=0;i<v.size();i++) cout <<v[i].count<<' '<<v[i].price<<endl; cout <<endl; //cortiryem vector po count sort<Record>(v,0);//sortirovka po count. for(int i=0;i<v.size();i++) cout <<v[i].count<<' '<<v[i].price<<endl; cout <<endl; //cortiryem vector po price sort<Record>(v,1);//sortirovka po price. for(int i=0;i<v.size();i++) cout <<v[i].count<<' '<<v[i].price<<endl; cout <<endl; return 0; } |
Просто два параметра функция принимает да и сортировка токо для типа Record, хотя нужно было сделать и не токо. Чо нить добавить, например если мы передаем параметр 3 то уже не для рекорд. Ну да фиг сним. 🙂 Гамно задача.
[youtube]http://www.youtube.com/watch?v=RxH3Yv62sQ0[/youtube]