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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 203, средняя оценка - 4.68
VorobeY1326
Ученик 11 класса)
4 / 4 / 0
Регистрация: 11.04.2009
Сообщений: 67
#1

std::sort() - C++

09.10.2009, 19:43. Просмотров 27142. Ответов 8

Доброго времени суток!

Есть некая структура:

C++
1
2
3
4
5
struct member
{
        int latency;
        std::vector<int>child;
};
Нужно в конце программы отсортировать её по параметру latency..
Я хотел воспользоваться стандартным std::sort, но завис на третьем аргументе - некой функции, которая поясняет sort(), по какому принципу сравнивать 2 элемента.
Как должна выглядеть эта функция?

Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2009, 19:43     std::sort()
Посмотрите здесь:

std::sort + std::lower_bound - C++
тема такая: есть класс person: class Person{ private: string name_; string adress_; long phone_; есть вектор объектов...

std::sort - C++
Достоинства и недостатки делаю таблицу, достоинств и недостатков std::Sort. собственно, не нащёл нечего про это в википедии

algorithm std::sort - C++
Почему так делать нельзя? #include &lt;algorithm&gt; using namespace std; class T { private: int arr;

Сортировка массива c++ std :: sort() - C++
Дан двумерный массив символов char M, надо отсортировать его при помощи std :: sort(), построчно, т.е. допустим было 00011 11111 ...

Абстрактный класс и std::sort - C++
Добрый день, Не компилируется строка: std::vector&lt;mtl::io::QtFile*&gt; *vec; ... mtl::misc::Sort(vec); // ЭТА СТРОКА ...

Сортировка вектора через std::sort - C++
Доброго времени суток, интересует сабж void Sort(list&lt;int&gt; &amp;past) { sort(past.begin(), past.end()); } на такое выдает ...

Сортировка индексов алгоритмом std::sort - C++
Есть два массива одинаковой размерности. В одном хоть что, во втором целые числа (индексы элементов первого массива). Нужно выполнить...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
09.10.2009, 19:49     std::sort() #2
загнать данные из структуры в вектор, или вообще заменить структуру на вектор типа
vector<pair<int, vector<int> > >
вот немного теории, может поможет
Алгоритм сортировки активно использует арифметику на указателях,
он может работать только на итераторах произвольного доступа. Отсор-
тировать двусвязный список —н етривиальная алгоритмическая задача.
На практике в такой ситуации проще сделать из него vector, а затем
осуществить обратное преобразование. В этом помогут интервальные
конструкторы:
deque<int> q;
...
// Упорядочим элементы в q по неубыванию
vector<int> v(all(q));
// то же, что vector<int> v(q.begin(), q.end());
sort(all(v));
q.assign(all(v));
// то же, что q = deque<int>(all(v));
Sich_Taras
14 / 14 / 1
Регистрация: 08.10.2009
Сообщений: 114
09.10.2009, 20:06     std::sort() #3
Например, если у тебя есть:
C++
1
2
3
struct lat{
int latency;
};
Нужно реализовать оператор меньше типа:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct lat{
int latency;
bool operator<(lat ob2)
{
   return (latency < ob2.latency);
}
};
 
int main()
{
    vector<lat> Latensies;
    //Filling vector
   //..............
   sort(Latencies.begin(), Latencies.end());
 
  //....
  return 0;
 
}
Добавлено через 15 секунд
Например, если у тебя есть:
C++
1
2
3
struct lat{
int latency;
};
Нужно реализовать оператор меньше типа:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct lat{
int latency;
bool operator<(lat ob2)
{
   return (latency < ob2.latency);
}
};
 
int main()
{
    vector<lat> Latensies;
    //Filling vector
   //..............
   sort(Latencies.begin(), Latencies.end());
 
  //....
  return 0;
 
}
VorobeY1326
Ученик 11 класса)
4 / 4 / 0
Регистрация: 11.04.2009
Сообщений: 67
09.10.2009, 21:08  [ТС]     std::sort() #4
Спасибо, сейчас попробую '<' реализовать

Добавлено через 9 минут
Выпала ошибка:

[C++ Error] _function_base.h(73): E2093 'operator<' not implemented in type 'member' for arguments of the same type

В function_base.h:

C++
1
2
3
4
5
template <class _Tp>
struct less : public binary_function<_Tp,_Tp,bool> 
{
  bool operator()(const _Tp& __x, const _Tp& __y) const { return __x < __y; } //ЗДЕСЬ
};
Добавлено через 46 минут
В Стауструпе написано:

C++
1
template<class Ran, class Cmp>sort(Ran first, Ran last, Cmp cmp);
Как можно это реализовать в данном случае?
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,354
09.10.2009, 21:46     std::sort() #5
Ничего не понял. Структуру member отсортировать по параметру latency невозможно - так, как это написано в первом сообщении треда. Ты что-то напутал в самом первом сообщении. Гадать, что именно ты имел в виду - дело неблагодарное.
А вообще, это все просто. Исправься, поможем.
Rififi
2338 / 1053 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
09.10.2009, 21:58     std::sort() #6
VorobeY1326,

C++
1
2
3
4
5
6
7
8
struct member_less : public std::binary_function<member, member, bool>
{
    bool operator()(const member& m1, const member& m2) const
    { return m1.latency < m2.latency; };
};
 
std::vector<member> v;
std::sort(v.begin(), v.end(), member_less());
Добавлено через 2 минуты
ps. джедайский способ:

C++
1
2
3
4
#include <boost/lambda/lambda.hpp>
using namespace boost::lambda;
 
std::sort(v.begin(), v.end(), &_1 ->* &member::latency < &_2 ->* &member::latency);
Sich_Taras
14 / 14 / 1
Регистрация: 08.10.2009
Сообщений: 114
09.10.2009, 22:02     std::sort() #7
Синтаксис оператора описано выше. Тебе надо чтобы твоя структура имела оператор меньше - иначе сортировка работать не будет.
VorobeY1326
Ученик 11 класса)
4 / 4 / 0
Регистрация: 11.04.2009
Сообщений: 67
10.10.2009, 06:12  [ТС]     std::sort() #8
Rififi, спасибо

C++
1
2
3
4
5
6
7
8
struct member_less : public std::binary_function<member, member, bool>
{
        bool operator()(const member& m1, const member& m2) const
        { return m1.latency < m2.latency; };
};
 
std::vector<member> v;
std::sort(v.begin(), v.end(), member_less());
Заработало..
Только один вопрос - что сия вещь делает? То есть где то в std есть объявления бинарных функций, а программист сам определяет их для своих классов?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2009, 10:59     std::sort()
Еще ссылки по теме:

Сортировка списка с использованием std::sort - C++
Что-то не получается отсортировать целочисленные данные расположенные в списке, компилятор (VS10) жутко ругается. В чем может быть дело? ...

Не работает std::sort со списком указателей - C++
Добрый день, товарищи! Делаю лабу по STL в VS 2015. имеется базовый класс и три от него унаследованных. делаю list указателей на базовый...

Std::sort - 3 аргумент другая функция - C++
Здравствуйте. Так все работает //вызывается из наследника sort(group.begin(), group.end(), ( MyClass&amp; obj1, MyClass&amp; obj2)...

не могу понять почему не работает std::sort() - C++
#include &lt;vector&gt; #include &lt;algorithm&gt; using namespace std; class T{ public: T(int a_, int b_) : a(a_), b(b_){}...

Сравнение алгоритмов сортировки Хоара и std::sort - C++
Собственно в универе было дано задание, написать программу которая принимает на вход из файла в структуру имя - производитель-цена и...


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

Или воспользуйтесь поиском по форуму:
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,354
10.10.2009, 10:59     std::sort() #9
Я, по-моему, уже называл полезную книжку: Леен Аммерааль, STL для программистов на C++.
Она существует в электронном виде, гуглится за пять минут. Рекомендую. Читается легко.
Yandex
Объявления
10.10.2009, 10:59     std::sort()
Ответ Создать тему
Опции темы

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