Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2012, 20:58   #1
Anthoni
Пользователь
 
Регистрация: 16.09.2012
Сообщений: 10
По умолчанию Сортировка вектора

Помогите плз) Как можно отсортировать вектор?
Есть класс:
Код:
class tovar{
	int amt;//количество на складе
	string brand;//брен
	string name;//имя товарар
	...
public:
...
}
И вектор:
Код:
vector<tovar> vtovar;
Нужно сначала отсортировать по brand и вывести на экран, а потом по name.
Anthoni вне форума Ответить с цитированием
Старый 24.11.2012, 21:24   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Код:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>

using namespace std;

struct tovar {
	tovar()
	{}

	tovar(int a, const char *b, const char *n) :
		amt(a),
		brand(b),
		name(n)
	{}
	
	int amt;
	string brand;
	string name;
};

bool cmp_by_amt(const tovar &l, const tovar &r)
{ return l.amt < r.amt; }

bool cmp_by_brand(const tovar &l, const tovar &r)
{ return l.brand < r.brand; }

bool cmp_by_name(const tovar &l, const tovar &r)
{ return l.name < r.name; }

ostream &operator<<(ostream &o, const tovar &tov)
{
	o << "count = " << tov.amt << endl;
	o << "brand = " << tov.brand << endl;
	o << "name = " << tov.name << endl;
	return o;
}
 
int main()
{
	vector<tovar> vtovar;

	vtovar.push_back(tovar(1, "aaa", "eee"));
	vtovar.push_back(tovar(2, "bbb", "ddd"));
	vtovar.push_back(tovar(3, "ccc", "ccc"));
	vtovar.push_back(tovar(4, "ddd", "bbb"));
	vtovar.push_back(tovar(5, "eee", "aaa"));

	cout << "sort by name" << endl;
	sort(vtovar.begin(), vtovar.end(), cmp_by_name);
	copy(vtovar.begin(), vtovar.end(), ostream_iterator<tovar>(cout, "\n"));

	cout << "sort by brand" << endl;
	sort(vtovar.begin(), vtovar.end(), cmp_by_brand);
	copy(vtovar.begin(), vtovar.end(), ostream_iterator<tovar>(cout, "\n"));

	cout << "sort by amt" << endl;
	sort(vtovar.begin(), vtovar.end(), cmp_by_amt);
	copy(vtovar.begin(), vtovar.end(), ostream_iterator<tovar>(cout, "\n"));

        return 0;
}

http://ideone.com/AmZCNo
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 24.11.2012, 21:27   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
sort(vtovar.begin(),vtovar.end());
используя хедер algorithm и пространство имен std

подходит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.11.2012, 22:16   #4
Anthoni
Пользователь
 
Регистрация: 16.09.2012
Сообщений: 10
По умолчанию

pproger

Большее спасибо! Переделал под класс, все работает))
Anthoni вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка вектора DarkEN_ANGEL Общие вопросы C/C++ 11 24.05.2012 18:51
Сортировка вектора G-58 Visual C++ 2 18.05.2011 21:26
быстрая сортировка вектора структур alexsashkin Помощь студентам 0 23.12.2010 19:21
Сортировка элементов вектора Blad47 Общие вопросы C/C++ 10 29.11.2010 18:42
Сортировка элементов вектора m9yt Общие вопросы C/C++ 1 28.04.2010 18:13