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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2019, 21:56   #11
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Я же давал ссылку...
1. Да, параметры функции-компаратора.
2. Ну вы же сортируете вектор векторов. Логично, что каждый элемент вашего вектора, в том числе и переданные через параметры a,b - вектор.
p51x вне форума Ответить с цитированием
Старый 30.05.2019, 22:38   #12
Android1
Форумчанин
 
Регистрация: 26.08.2010
Сообщений: 121
По умолчанию

Но, а.front() и b.front() - первый элемент какого вектора ?
Android1 вне форума Ответить с цитированием
Старый 30.05.2019, 23:02   #13
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Чтобы сортировать список, нужно уметь сравнивать его элементы.
Для этого в функцию сортировки передаётся функция-компаратор.
Каждый раз, когда нужно сравнить два элемента, будет вызываться функция-компаратор. Для этих двух элементов. Они и будут параметрами. То есть, в нашем случае a и b.
Black Fregat вне форума Ответить с цитированием
Старый 30.05.2019, 23:14   #14
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
Сообщение от Android1 Посмотреть сообщение
Но, а.front() и b.front() - первый элемент какого вектора ?
Еще раз:
1. У вас вектор векторов vector<vector<string>>massiv;
2. Каждый элемент этого вектора вектор. Т.е. первый элеммент vector<string>, второй элемент vector<string>, третий - vector<string>, ....
3. Компаратор сравнивает два элемента. Т.е. получает два vector<string> и сравнивает.
p51x вне форума Ответить с цитированием
Старый 30.05.2019, 23:39   #15
Android1
Форумчанин
 
Регистрация: 26.08.2010
Сообщений: 121
По умолчанию

Получается, что сравнивается два каждых соседних элемента вектора вектора, но по факту сортируется только, как бы первый столбец массива.
Android1 вне форума Ответить с цитированием
Старый 31.05.2019, 06:14   #16
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от Android1 Посмотреть сообщение
Получается, что сравнивается два каждых соседних элемента вектора вектора
Нет. Сравниваются те, которые требуются согласно алгоритму. Это только "пузырёк" всегда соседние сравнивает.
Цитата:
Сообщение от Android1 Посмотреть сообщение
но по факту сортируется только, как бы первый столбец массива
Нет. Сравнивается только первый, а сортируется весь.
Black Fregat вне форума Ответить с цитированием
Старый 31.05.2019, 08:04   #17
Android1
Форумчанин
 
Регистрация: 26.08.2010
Сообщений: 121
По умолчанию

Понимаю, что уже надоел, но вот еще раз позвольте пожалуйста:

Есть функция sort, она принимает на вход пераметры:
-грубо говоря адресс начало вектора и адресс конца вектора +1
-далее на вход принимается некая назывемая анонимная функция, которая на вход так принимает два параметра а и b (почему auto, почему я сам не могу указать тип я так и не понял) и вот потом эти два параметра сравниваются, но я не могу понять, что за параметры сравниваются, так как я не понимаю, какие параметры и в какой части кода передались в эту анонимную функцию.
Android1 вне форума Ответить с цитированием
Старый 31.05.2019, 08:46   #18
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
Сообщение от Android1 Посмотреть сообщение
почему auto, почему я сам не могу указать тип я так и не понял
Можете. ауто придумали для того, чтобы вы как раз и не писали std::vector<std::ccc<std::list<std: :string>...> да еще для всех параметров + вам бы не пришлось для небольшого различия в типах параметров копи-пастить тело функции.

Цитата:
Сообщение от Android1 Посмотреть сообщение
и вот потом эти два параметра сравниваются, но я не могу понять, что за параметры сравниваются, так как я не понимаю, какие параметры и в какой части кода передались в эту анонимную функцию.
Вы слышали про алгоритмы сортировки? Там - пузырек, вставками, выбором, пирамидальная, ... ? Вы видели, что там в процессе прохода элементы вашего набора сравниваются по опред. алгоритму?
Вот, когда алгоритму надо сравнить два элемента из вашего вектора, он и вызываете компаратор и передает элементы, которые хочет сравнить.
p51x вне форума Ответить с цитированием
Старый 04.06.2019, 14:17   #19
Android1
Форумчанин
 
Регистрация: 26.08.2010
Сообщений: 121
По умолчанию

Про пузырек только слышал.
То, что алгоритм сортировки передает элементы для сравнения в функцию я понимаю, я не понимаю, какие элементы передаются.
Ну то есть к примеру имеется тот же самый вектор условно состоящий из трех столбцов, какие элемен ы этого вектора перелаются в это условие :
Код:
a.front()<b.front()
?

То есть по этому условию сортируется тольуо первый столбец, остальные элементы 2 и 3 столбца сохраняют свое положение в рамках сортировки.

Что если я хочу чделать сортировку не по первому столбцу, а по второму или сразу по обоим, какие элементы нужно передать в функцию и сравнить ?

Последний раз редактировалось Android1; 04.06.2019 в 14:24.
Android1 вне форума Ответить с цитированием
Старый 04.06.2019, 14:21   #20
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
Сообщение от Android1 Посмотреть сообщение
Про пузырек только слышал.
Отлично. Открываем пузырек: https://ru.wikipedia.org/wiki/%D0%A1...BA%D0%BE%D0%BC

Код:
 ЦИКЛ ДЛЯ J=1 ДО N-1 ШАГ 1                       FOR J=1 TO N-1 STEP 1
   F=0                                             F=0 
   ЦИКЛ ДЛЯ I=1 ДО N-J ШАГ 1                       FOR I=1 TO N-J STEP 1 
     ЕСЛИ A[I] > A[I+1] ТО ОБМЕН A[I],A[I+1]:F=1     IF A[I]>A[I+1] THEN SWAP A[I],A[I+1]:F=1
   СЛЕДУЮЩЕЕ I                                     NEXT I  
   ЕСЛИ F=0 ТО ВЫХОД ИЗ ЦИКЛА                      IF F=0 THEN EXIT FOR
 СЛЕДУЮЩЕЕ J
Вот видите выделенные сравнения? Видите какие элементы в данном алгоритме передаются компаратору?
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрая сортировка(сортировка Хоара). Сортировка фрагмента массива [C++] druger Помощь студентам 0 20.04.2012 15:49
Сортировка Шелла и Шейкер-сортировка AleksandrMakarov Паскаль, Turbo Pascal, PascalABC.NET 11 11.03.2012 12:18
Сортировка массива методами предсортировки и слияния, и пирамидальная сортировка. lenny_24 Помощь студентам 2 17.04.2011 18:57
паскаль,одномерный массив,сортировка вставка,сортировка убывания,от максимального до конца немозг Помощь студентам 11 06.02.2010 21:57
Сортировка файлов в Explorer vs сортировка в Delphi mutabor Общие вопросы Delphi 11 04.09.2009 14:32