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

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

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

C++ Составить блок – схемы для шейкер- сортировки и сортировки Шелла
C++ Составить программы для пузырьковой сортировки и сортировки посредством выбора с применением оператора while
C++ Функция сортировки вектора и списка
Составить главную программу и функцию. Для данного вектора А(М) найти количество неповторяющихся элементов вектора C++
C++ Сделать так, чтобы после сортировки вектора указатель показывал на тот же элемент, что и до сортировки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
02.02.2014, 22:20     Алгоритм сортировки для вектора #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Suares, Вы можете имплементировать свою функцию сравнения и использовать sort
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
02.02.2014, 22:50     Алгоритм сортировки для вектора #3
Цитата Сообщение от metaluga145 Посмотреть сообщение
Вы можете имплементировать свою функцию сравнения
во у Вас и термины, может проще сказать "ввести предикат"?
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
02.02.2014, 22:56     Алгоритм сортировки для вектора #4
Цитата Сообщение от abit Посмотреть сообщение
во у Вас и термины, может проще сказать "ввести предикат"?
имплеменировать функцию-предикат. Что Вас не устраивает?
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
02.02.2014, 23:05     Алгоритм сортировки для вектора #5
Цитата Сообщение от metaluga145 Посмотреть сообщение
имплеменировать функцию-предикат. Что Вас не устраивает?
да это мой страный юмор был, в общем для "имплементации" в программировании есть русское слово "реализовывать", да собственно оно тут лесом, если просто освоить понятие предиката, в STL и ООП предикат нужная вещь
metaluga145
02.02.2014, 23:10
  #6

Не по теме:

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

gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 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));
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
02.02.2014, 23:27     Алгоритм сортировки для вектора #8
gray_fox, можно, кст, просто перегрузить оператор сравнения для структуры. вроде бы то же самое будет, или нет?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
02.02.2014, 23:31     Алгоритм сортировки для вектора #9
metaluga145, можно, но так стоит делать, если только объекты класса действительно так "сравниваются", а не потому что "что бы вот здесь по такому полю отсортировать".
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ой строки, то меняем между собой строки.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 21:07     Алгоритм сортировки для вектора
Еще ссылки по теме:

C++ Реализуйте алгоритм сортировки для массива, содержащего указатели на объекты-множества целых чисел
Как возможно реализовать алгоритм сортировки "выбором" для строк матрицы? C++

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

Или воспользуйтесь поиском по форуму:
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 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));
Yandex
Объявления
04.02.2014, 21:07     Алгоритм сортировки для вектора
Ответ Создать тему
Опции темы

Текущее время: 21:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru