Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Suares
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 106
1

Алгоритм сортировки для вектора

02.02.2014, 21:45. Просмотров 919. Ответов 10
Метки нет (Все метки)

Ребята у меня есть структура типа:
C++
1
2
3
4
5
6
7
struct Set
{
    int row;    //строка в матрице
    int value;  //значение, которое повторяется
    int count; //количество повторений значения
    ...
};
Это структура для хранения повторяющихся значений в строке матрицы.
Я хочу отсортировать весь вектор данных значений по полю count.
Подскажите алгоритм из STL или boost для сортировки. А то через for уже не хочется
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2014, 21:45
Ответы с готовыми решениями:

Сделать так, чтобы после сортировки вектора указатель показывал на тот же элемент, что и до сортировки
Есть вектор(STL) элементов. У меня есть указатель на определенный элемент. Я хочу сделать так,...

Написал алгоритм для сортировки рациональных чисел, но есть траблы с выводом их
В общем есть массив из пяти элементов Rational A = {3/2,1/3,1/4,2/4,3/4}; и при сортировке...

Реализуйте алгоритм сортировки для массива, содержащего указатели на объекты-множества целых чисел
Помогите сделать лабу, Я даже не знаю с чего начинать. Пользователь вводит в программу...

Определите, сколько обменов сделает алгоритм пузырьковой сортировки по возрастанию для данного массива
Определите, сколько обменов сделает алгоритм пузырьковой сортировки по возрастанию для данного...

Как возможно реализовать алгоритм сортировки "выбором" для строк матрицы?
Допустим мне дана динамическая матрица размерностью n на m, и надо отсортировать строки между собой...

10
metaluga145
243 / 244 / 38
Регистрация: 08.04.2013
Сообщений: 927
02.02.2014, 22:20 2
Лучший ответ Сообщение было отмечено Suares как решение

Решение

Suares, Вы можете имплементировать свою функцию сравнения и использовать sort
1
abit
275 / 274 / 83
Регистрация: 03.02.2013
Сообщений: 786
02.02.2014, 22:50 3
Цитата Сообщение от metaluga145 Посмотреть сообщение
Вы можете имплементировать свою функцию сравнения
во у Вас и термины, может проще сказать "ввести предикат"?
1
metaluga145
243 / 244 / 38
Регистрация: 08.04.2013
Сообщений: 927
02.02.2014, 22:56 4
Цитата Сообщение от abit Посмотреть сообщение
во у Вас и термины, может проще сказать "ввести предикат"?
имплеменировать функцию-предикат. Что Вас не устраивает?
0
02.02.2014, 22:56
abit
275 / 274 / 83
Регистрация: 03.02.2013
Сообщений: 786
02.02.2014, 23:05 5
Цитата Сообщение от metaluga145 Посмотреть сообщение
имплеменировать функцию-предикат. Что Вас не устраивает?
да это мой страный юмор был, в общем для "имплементации" в программировании есть русское слово "реализовывать", да собственно оно тут лесом, если просто освоить понятие предиката, в STL и ООП предикат нужная вещь
1
metaluga145
02.02.2014, 23:10
  #6

Не по теме:

Цитата Сообщение от abit Посмотреть сообщение
"имплементации" в программировании есть русское слово "реализовывать"
учитывая где я учусь, мне вообще сложно выражать какие-то программистские термины на русском(даже указатель мне легче заменить на поинтер). так что уж простите.

1
gray_fox
What a waste!
1561 / 1265 / 168
Регистрация: 21.04.2012
Сообщений: 2,649
Завершенные тесты: 3
02.02.2014, 23:19 7
Можно использовать boost::bind:
C++
1
2
3
4
5
6
7
#include <boost/bind.hpp>
#include <boost/range/algorithm/sort.hpp>
 
// ...
 
using namespace boost::placeholders;
boost::sort(vector, boost::bind(&Set::count, _1) < boost::bind(&Set::count, _2));
2
metaluga145
243 / 244 / 38
Регистрация: 08.04.2013
Сообщений: 927
02.02.2014, 23:27 8
gray_fox, можно, кст, просто перегрузить оператор сравнения для структуры. вроде бы то же самое будет, или нет?
0
gray_fox
What a waste!
1561 / 1265 / 168
Регистрация: 21.04.2012
Сообщений: 2,649
Завершенные тесты: 3
02.02.2014, 23:31 9
metaluga145, можно, но так стоит делать, если только объекты класса действительно так "сравниваются", а не потому что "что бы вот здесь по такому полю отсортировать".
0
Suares
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 106
04.02.2014, 20:16  [ТС] 10
Цитата Сообщение от gray_fox Посмотреть сообщение
Можно использовать boost::bind:
А можно ли таким образом отсортировать тип std::map?
Вот у меня есть такая таблица:
C++
1
2
typedef std::map<std::string, std::string> Row; // first - title of column, second - value of column 
typedef std::map<int, Row> Table; // first - number of row
И я хочу отсортировать значения по любому столцу. т. е. если у меня в 1ом столбце 1ой строки значение больше чем в 1ом столбце 2ой строки, то меняем между собой строки.
0
gray_fox
What a waste!
1561 / 1265 / 168
Регистрация: 21.04.2012
Сообщений: 2,649
Завершенные тесты: 3
04.02.2014, 21:07 11
Suares, map уже отсортирован согласно ключу, ключ в паре ключ\значение неизменяем, да и алгоритм sort требует итераторы с произвольным доступом, так что не получиться, если только самому сортировку писать.
Не знаю правда, зачем таблицу таким образом представлять, но это уже другой вопрос)

Добавлено через 34 минуты
Т.е. думаю можно написать сортировку, которая будет работать с двунаправленными итераторами, потом что-нибудь вроде
C++
1
my_sort(table | boost::adaptors::map_values, boost::bind(&Row::first, _1) < boost::bind(&Row::first, _2));
1
04.02.2014, 21:07
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 21:07

Функция сортировки вектора и списка
Добрый день, помогите пожалуйста) Суть задания в том, что нужно написать функцию сортировки (Одну!)...

Составить блок – схемы для шейкер- сортировки и сортировки Шелла
Доброго времени суток, очень нужна ваша помощь в решении данной проблемы, буду бесконечно...

Составить программы для пузырьковой сортировки и сортировки посредством выбора с применением оператора while
Доброго времени суток, очень нужна ваша помощь в решении данной проблемы, буду бесконечно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.