Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Отсортировать чиста в ListBox


Автор: stat007 15.1.2010, 23:59
На форме есть ListBox1, в котором введены числа в Items и кнопка. 
Как сделать так, чтобы при нажатии на кнопку все числа в ListBox1 отсортировались. Сортировку нужно сделать с помощью алгоритма sort.

Автор: artsb 16.1.2010, 13:47
Код

#include <vector>
#include <algorithm>
//...
bool m_comp(const AnsiString &f, const AnsiString &l) {
 int _f, _l;

 try {
  _f = f.ToInt();
 }
 catch(...) {
  return false;
 }

 try {
  _l = l.ToInt();
 }
 catch(...) {
  return true;
 }

 if(_l > _f)
  return true;

 return false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
unsigned short i;
std::vector<AnsiString> v;
for(i=0; i<ListBox1->Count; i++)
 v.push_back(ListBox1->Items->Strings[i]);

std::vector<AnsiString>::iterator b = v.begin(), e = v.end();

std::sort(b, e, m_comp);

ListBox1->Clear();
for(i=0; i<v.size(); i++)
 ListBox1->Items->Add(v[i]);
v.clear();
}

Сортирует по возрастанию целые числа. Если вдруг в список попали строки (мало ли), они окажутся в самом конце отсортированного списка в не отсортированном виде.

Автор: mrbrooks 16.1.2010, 15:49
stat007, а чем не подходят стандартные средства билдера.
Код

#include <memory>
int __fastcall ListComp(TStringList *list, int item1, int item2)
{
    return list->Strings[item1].ToInt() - list->Strings[item2].ToInt();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
std::auto_ptr<TStringList>list(new TStringList());
list->Assign(ListBox1->Items);
list->CustomSort(ListComp);
ListBox1->Items->Clear();
ListBox1->Items->Assign(list.get());
}
//---------------------------------------------------------------------------

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)