Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Suares
0 / 0 / 0
Регистрация: 28.02.2013
Сообщений: 106
#1

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

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

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

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

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

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

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

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

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

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

Не по теме:

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

1
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 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 / 20
Регистрация: 08.04.2013
Сообщений: 927
02.02.2014, 23:27 #8
gray_fox, можно, кст, просто перегрузить оператор сравнения для структуры. вроде бы то же самое будет, или нет?
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 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!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 21:07
Привет! Вот еще темы с ответами:

Ошибка с итераторами для целочисленного вектора и вектора структуры - C++
Пытаюсь разобраться с векторами. Для динамической работы с памятью вещь, вроде, замечательная и удобная. Только необходимо использовать...

Составить главную программу и функцию. Для данного вектора А(М) найти количество неповторяющихся элементов вектора - C++
Здравствуйте. Буду очень благодарен,если кто нибудь напишет два кода к этим задачам. Спасибо за внимание. Задача 1. Составить...

Алгоритм сортировки - C++
Здравствуйте, подскажите пожалуйста какой алгоритм можно использовать при решении такой задачи: Дана строка char * из букв и цифр...

Алгоритм сортировки - C++
пацаны ребята помогите, реализовал два алгоритма на C++, алгоритм сортировки пирамидальный(кучей) и быстрой сортировки, все они сортируют...


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

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

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