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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2016, 20:35   #1
Asya7
Пользователь
 
Аватар для Asya7
 
Регистрация: 30.11.2014
Сообщений: 65
По умолчанию Как работает sort & compare?

Подскажите, как работает compare в
Код:
sort(s.begin(), s.end(), compare);
,где
Код:
vector<pair<int, int> > s;
?
Asya7 вне форума Ответить с цитированием
Старый 12.06.2016, 20:42   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Как вы его реализовали так и работает.

http://en.cppreference.com/w/cpp/algorithm/sort
Цитата:
comp - comparison function object (i.e. an object that satisfies the requirements of Compare) which returns ​true if the first argument is less than (i.e. is ordered before) the second.

The signature of the comparison function should be equivalent to the following:
Код:
bool cmp(const Type1 &a, const Type2 &b);
The signature does not need to have const &, but the function object must not modify the objects passed to it.
The types Type1 and Type2 must be such that an object of type RandomIt can be dereferenced and then implicitly converted to both of them. ​
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 12.06.2016, 21:00   #3
Asya7
Пользователь
 
Аватар для Asya7
 
Регистрация: 30.11.2014
Сообщений: 65
По умолчанию

То есть, если у меня будет записано:
Код:
#define PB push_back
#define BEG begin()
#define MP make_pair
#define F first
#define S second

bool compare(const pair<int, int> &left, const pair<int, int> &right){
	return left.F <= right.F;
}

int main(){
	int M;
	int readInt1, readInt2;
	vector<pair<int, int> > segments;
	vector<int> solutionInd;
	cin >> M;
	while (cin >> readInt1 >> readInt2 && !(readInt1 == 0 && readInt2 == 0)){
		segments.PB(MP(readInt1, readInt2));
	}
	sort(segments.begin(), segments.end(), compare);
	if (segments.empty() || segments[0].F > 0){
		printf("No solution\n");
		return 0;
	}
то будет выполнятся сортировка по наименьшему первому( F) значению? Верно?
(Просто не понятно как Compare понимает что сравнивать - ведь никакие значения не передавались)
Asya7 вне форума Ответить с цитированием
Старый 12.06.2016, 21:07   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

В смысле понимает?
Написано ж выше что функция возвращать должна.
Цитата:
returns ​true if the first argument is less than (i.e. is ordered before) the second.
sort просто вызывает ее передавая разные элементы. Вы в sort передаете указатель на функцию.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 12.06.2016, 21:24   #5
Asya7
Пользователь
 
Аватар для Asya7
 
Регистрация: 30.11.2014
Сообщений: 65
По умолчанию

Вроде понятно стало. Спасибо!
Asya7 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не работает count(&users) - В ДАННОМ КОДЕ Дмитрий_Попов PHP 1 09.02.2012 21:51
Как убрать замену символьных ссылок(&#xD;&#xA; и т.д.) при сериализации(печати) xml? hard-t JavaScript, Ajax 0 19.01.2012 09:50
Не работает метод SORT leonard Microsoft Office Excel 0 17.05.2011 13:18
Как работает опция Option Compare Database VistaSV30 Microsoft Office Access 2 20.12.2009 07:17
Как работает WM_SYSCOMMAND & SC_MOUSEMENU? TwiX Win Api 3 08.12.2009 17:01