Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

C++ Bulder, класс TList: метод List->Sort. Очень срочно.

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
аня
Гость





СообщениеДобавлено: Сб Июн 26 2004 17:47    Заголовок сообщения: C++ Bulder, класс TList: метод List->Sort. Очень срочно. Ответить с цитатой

Есть структура

Цитата:

struct info
{
int v1;
int v2;
}


Заполняем список класса TList:
Цитата:

first->Add(new info(1, 2));
first->Add(new info(3, 4));
first->Add(new info(4, 6));
first->Add(new info(5, 7));

first->Add(new info(2, 2));
first->Add(new info(4, 7));
first->Add(new info(5, 6));
first->Add(new info(6, 10));


Нужен отсортированный список по возрастанию. Причем только по первому элементу в структурной записи списка (info->v1).
Для этого использую метод List->Sort и функцию "_compare2":

Цитата:

int __fastcall _compare2(void* o1, void* o2)
{
return
((info *)o1)->v1 > ((info *)o2)->v1 ?
1 : ((info *)o1)->v1 < ((info *)o2)->v1 ?
-1 : 0;
}


Далее пишу: "first->Sort(_compare2);"

Список сортируется по возрастанию , но с небольшим недочетом.
Как сделать так, чтобы, если записи по первому элементу повторяются (т.е по info->v1), то в отсортированном списке первым шел тот элемент, который первым встретился в изначальном списке.

Т.е. в итоге должен получится список:
(1,2)(2,2)(3,4)(4,6)(4,7)(5,7)(5,6)(6,10).
Вернуться к началу
wildwind



Зарегистрирован: 03.02.2004
Сообщения: 268
Откуда: Москва

СообщениеДобавлено: Вс Июн 27 2004 16:42    Заголовок сообщения: Ответить с цитатой

Как видишь, в функции сравнения нельзя получить информацию о положении элемента в списке. Это не согласуется с самой концепцией сравнения: отношения между элементами "больше" или "меньше" не зависят от их местонахождения.

Твою проблему можно решить так.
1. Добавь в структуру еще одно поле, скажем "v3".
2. При добавлении элементов в список заполняй его последовательными значениями 1, 2, 3, ...
3. Сортировку делай по ключу v1+v3.

BTW давать объектам в программе неосмысленные имена (типа v1, v2, v3) -- это плохой стиль.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...