Как отсортировать CArray определенного пользователем типа? - PullRequest
6 голосов
/ 28 октября 2008

Есть ли встроенный способ сортировки CArray в C ++?

1 Ответ

9 голосов
/ 28 октября 2008

std::sort() должно работать:

CArray<int> arrayOfInts;
arrayOfInts.Add(7);
arrayOfInts.Add(114);
arrayOfInts.Add(3);
std::sort(arrayOfInts.GetData(), arrayOfInts.GetData()+arrayOfInts.GetSize());

При этом используется указатель на первый элемент в массиве в качестве начального итератора, а указатель на один после последнего элемента в качестве последнего итератора (в любом случае никогда не следует разыменовывать, так что все хорошо). Вы также можете передать пользовательский предикат, если массив содержит более интересные данные:

struct Foo
{
  int val;
  double priority;
};

bool FooPred(const Foo& first, const Foo& second)
{
   if ( first.val < second.val )
      return true;
   if ( first.val > second.val )
      return false;
   return first.priority < second.priority;
}

//... 

   CArray<Foo> bar;
   std::sort(bar.GetData(), bar.GetData()+bar.GetSize(), FooPred);

О - и не используйте CArray.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...