Предыдущий пост -
Следующий пост -

Шаблон функции sort().

Рубрика: C++, Дата: 5 April, 2013, Автор:
Tags:

Определите шаблонную функцию sort(), принимающую критерий сравнения в качестве шаблонного аргумента. Определите класс Record с двумя полями – count и price. Выполните сортировку vector<Record> по каждому полю.

Написал я шаблон функции sort() по обычной не помню как вид сортировки называется, двумя циклами короче. Той сортировкой которая по производительности такая как и все не лучшая. Вот код файла main.cpp:

//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]

rss