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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2019, 15:47   #1
Android1
Форумчанин
 
Регистрация: 26.08.2010
Сообщений: 121
По умолчанию Stable_sort сортировка

Здравствуйте,

Голову уже всю сломал, подскажите пожалуйста, как работает stable_sort ?

Вот есть вектор:
Код:
vector<vector<string>>massiv;
Саратов    100    a1
Москва     500    b1
Питер       400    c1 
Питер       410    d1
Волгда      230    e1
Саратов    110    f1
Москва     510    g1
Нужно отсортировать этот массив, по первому и второму столбцу.
Есть код:
Код:
Stable_sort(massiv.begin(), massiv.end(), [](auto a, auto b)
{
return (a.front()<b.front());
});
Код работает, сортирует по вощрастания первый столбец, но как он работает ума не приложу.

Что такое begin(), end() - это указатели ? Их можно заменить указателями ?

Что такое auto a, auto b ? Что они делают ?

A.front, b.front - иоже не понимаю смысла их действия.

Кто нибудь может подсказать, как это вме работает ?

Последний раз редактировалось Android1; 29.05.2019 в 15:50.
Android1 вне форума Ответить с цитированием
Старый 29.05.2019, 15:55   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

https://en.cppreference.com/w/cpp/algorithm/stable_sort
Или что у вас вызывает вопросы?
p51x вне форума Ответить с цитированием
Старый 29.05.2019, 16:09   #3
Android1
Форумчанин
 
Регистрация: 26.08.2010
Сообщений: 121
По умолчанию

Пример в это описании совершенно не понятен

Вот эта часть непонятна:
Код:
std::stable_sort(v.begin(), v.end());
 
    for (const Employee & e : v)
        std::cout << e.age << ", " << e.name << '\n';
Begin и end - это указатели ? Их можно заменить указателями ?

& e : v - тоже не понятно, что делает этот код.
Android1 вне форума Ответить с цитированием
Старый 29.05.2019, 16:30   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от Android1 Посмотреть сообщение
Begin и end - это указатели ?
Нет, итераторы.

https://en.cppreference.com/w/cpp/co...r/vector/begin
https://en.cppreference.com/w/cpp/container/vector/end

Цитата:
Сообщение от Android1 Посмотреть сообщение
Их можно заменить указателями ?
Можно, но зачем. Для обычных массивов лучше использовать std::begin(...), std::end(...)

Цитата:
Сообщение от Android1 Посмотреть сообщение
& e : v - тоже не понятно, что делает этот код.
https://en.cppreference.com/w/cpp/language/range-for

Цитата:
Сообщение от Android1 Посмотреть сообщение
Что такое auto a, auto b ? Что они делают ?
https://habr.com/en/post/182920/

Цитата:
Сообщение от Android1 Посмотреть сообщение
A.front, b.front - иоже не понимаю смысла их действия.
https://en.cppreference.com/w/cpp/co...r/vector/front

А на фига вам вообще это сдалось с такими знаниями в С++?

Последний раз редактировалось p51x; 29.05.2019 в 18:12. Причина: поправил "это"
p51x вне форума Ответить с цитированием
Старый 29.05.2019, 18:11   #5
Android1
Форумчанин
 
Регистрация: 26.08.2010
Сообщений: 121
По умолчанию

ЭО - это что ?
Android1 вне форума Ответить с цитированием
Старый 29.05.2019, 18:13   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Это "это"
p51x вне форума Ответить с цитированием
Старый 29.05.2019, 18:28   #7
Android1
Форумчанин
 
Регистрация: 26.08.2010
Сообщений: 121
По умолчанию

Тогда несовсем понял, что сдалось. Я просто хотел понять, как работает stable_sort, потому что не могу понять, как сразу два столбца отсортировать.
Android1 вне форума Ответить с цитированием
Старый 29.05.2019, 18:44   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Так что непонятно? Берет начало, конец, опционально компаратор и сортирует.
p51x вне форума Ответить с цитированием
Старый 29.05.2019, 21:47   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Android1 Посмотреть сообщение
как работает stable_sort, потому что не могу понять, как сразу два столбца отсортировать.
там, где сравнение (компарат) по первому столбцу нужно добавить условие если в первом столбце одинаковые значения, тогда сравнивать по второму столбцу:
Код:
if(a.front()==b.front()){
  return a.ВторойСтолбец()<b.ВторойСтолбец();
}else{
  return (a.front()<b.front());
}
p.s. пишу наугад, т.к. C++ не знаю
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.05.2019, 21:45   #10
Android1
Форумчанин
 
Регистрация: 26.08.2010
Сообщений: 121
По умолчанию

1)Не могу понять а и b , что это в данном случае ? Это параметры функции ?
2)Front возыращает первый элемент вектора. Но что такое а и b, что передвется в эти а и b ? Это что вектора ?
Android1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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