Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Не понимаю std::sort  (Прочитано 10824 раз)
0 Пользователей и 1 Гость смотрят эту тему.
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« : 13-07-2007 07:41 » 

Пишу на BuilderC++ 6.

Делаю так же, как в примере в хелпе:
Код: (C++)
struct TIndicatorOrder
{
    float order;
    // .....
};

bool operator<(const TIndicatorOrder &a, const TIndicatorOrder &b) { return a.order < b.order; };

Объявляю тип:
Код:
typedef std::vector<TIndicatorOrder *> vector_indicatorOrder_t;

В нужный момент делаю:
Код:
std::sort(list.begin(), list.end());

Как нИ странно, но сортировка отсутствует как класс...
Где я не так?
« Последнее редактирование: 13-07-2007 07:57 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #1 : 13-07-2007 08:07 » 

RXL, sort по умолчанию сортирует елементы контейнера через operator<
в контенере ты хранишь указатели
для указателей оператор меньше это просто сравнение двух чисел
что бы у тебя заработал алгоритм sort тебе нужно передать ему предикат третим параметром который будет сравнивать не адрема памяти а данные по этим адресам.

оператор меньше кстати удобней держать внутри структуры Улыбаюсь
Записан

Странно всё это....
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 13-07-2007 08:17 » 

LogRus, спасибо! Я бы долго искал...

Она и была внутри, но в процессе поиска я вынес, чтоб было как в примере.

А кстати, примерчика нет под рукой?
« Последнее редактирование: 13-07-2007 08:20 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #3 : 13-07-2007 08:35 » 

вот примерчик на бросал быренько
Код:
void print_elem(int* i)
{
std::cout << *i << "\n";
}

template<class T>
bool ptr_less(const T* lhs, const T* rhs)
{
return *lhs < *rhs;
}

int _tmain(int argc, _TCHAR* argv[])
{

std::vector<int*> v_int;

for (int i=0; i < 10; ++i)
v_int.push_back(new int(10-i));

std::cout << "Before sort:\n";
std::for_each(v_int.begin(),v_int.end(),&print_elem);

std::sort(v_int.begin(),v_int.end());
std::cout << "After simple sort:\n";
std::for_each(v_int.begin(),v_int.end(),&print_elem);

std::sort(v_int.begin(),v_int.end(),&ptr_less<int>);
std::cout << "After sort:\n";
std::for_each(v_int.begin(),v_int.end(),&print_elem);
return 0;
}
Записан

Странно всё это....
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 13-07-2007 09:24 » new

LogRus, спасибо
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines