Russian Qt Forum

Программирование => Алгоритмы => Тема начата: Igors от Август 11, 2011, 13:50



Название: Случай сортировки
Отправлено: Igors от Август 11, 2011, 13:50
Добрый день

В контейнере были такие строки
Цитировать
SectionX
SectionB
SectionC
SectionA
Потом в хвост добавились еще строки, напр
Цитировать
SectionX
SectionB
SectionC
SectionA
SectionB 2
SectionC 2
SectionB 3
Теперь надо получить
Цитировать
SectionX
SectionB
SectionB 2
SectionB 3
SectionC
SectionC 2
SectionA

Конечно проблема невеликая но как сделать покороче?

Спасибо


Название: Re: Случай сортировки
Отправлено: Пантер от Август 11, 2011, 13:52
Добавлять не в хвост?


Название: Re: Случай сортировки
Отправлено: Igors от Август 11, 2011, 13:55
Добавлять не в хвост?
Так "уплывут" индексы элементов что хранятся в др структурах


Название: Re: Случай сортировки
Отправлено: Пантер от Август 11, 2011, 13:56
При сортировке тоже уплывут.


Название: Re: Случай сортировки
Отправлено: Igors от Август 11, 2011, 14:31
При сортировке тоже уплывут.
Поэтому сначала я добавляю в хвост, завершаю все свои дела, и когда индексы уже никому не нужны - хочу рассортировать


Название: Re: Случай сортировки
Отправлено: Пантер от Август 11, 2011, 14:36
А в чем сложность с сортировкой? Покажи как делаешь, помозгуем.


Название: Re: Случай сортировки
Отправлено: SimpleSunny от Август 11, 2011, 14:50
Контейнер - это вектор?
Какое количество элементов в контейнере, и сколько добавляется элементов?


Название: Re: Случай сортировки
Отправлено: Igors от Август 11, 2011, 15:14
А в чем сложность с сортировкой? Покажи как делаешь, помозгуем.
В том что нетранзитивно: должно быть если a < b < c, то a < c, а так определить не получается

Контейнер - это вектор?
Какое количество элементов в контейнере, и сколько добавляется элементов?
Пишу ini файл, секции следуют в обычном (стандартном) порядке. По ходу дела может оказаться что есть "еще секции" (с теми же форматом данных но др. именами). Сделать в лоб не проблема, напр
Код
C++ (Qt)
void Sort( vector <string> & src )
{
 vector <string> dst;
 vector <bool> flag;
 flag.resze(src.size());
 
 for (size_t i = 0; i < src.size(); ++i) {
  if (flag[i]) continue;
  dst.push_back(src[i]);
  for (size_t j = i + 1; j < src.size(); ++j) {
   if (src[j].pos(src[i] + " ") == 0) {
    dst.push_back[src[j]];
    flag[j] = true;
   }
  }
 }
 src = dst;
}
 
Ну а если вместо ini файла будут серьезные данные ?


Название: Re: Случай сортировки
Отправлено: Пантер от Август 11, 2011, 15:22
На сколько много данных может быть?


Название: Re: Случай сортировки
Отправлено: Igors от Август 11, 2011, 16:16
На сколько много данных может быть?
Ну это не "мозгование" а "как обойти" - я об этом не спрашивал  :)


Название: Re: Случай сортировки
Отправлено: Igors от Август 11, 2011, 17:18
Сходил в магазин - и по дороге придумалось. Там все просто, даже сортировка не нужна

Edit: прошу прощения если (невольно) обманул кого-то. "Сортировка не нужна"  не значит что изложенное в посте #1 больше не нужно. Задача остается та же, просто это решается намного проще и быстрее без сортировки