2008-10-19 2 views
7

У меня есть связанный список, что я хочу, чтобы отсортировать части, например:Частичный вид станд :: Список

std::sort(someIterator, otherIterator, predicate); 

станд :: сортировать требует итераторы произвольного доступа, поэтому этот подход не работает. Существует специальность std :: list :: sort, но это может сортировать только весь список. Я не думаю, что у меня достаточно доступа к членам списка, чтобы написать что-то сам.

Есть ли способ сделать это, не меняя, скажем, вектор?

+0

и какова основная причина, по которой вы используете список вместо вектора? Несмотря на то, что std :: vector должен выполнять перемещение по avg. половина элементов (например, при удалении), это очень быстро благодаря кешу. std :: vector beats std :: list даже при частом удалении и вставке на rand. позиция Вы должны иметь очень большое количество элементов для получения прибыли, используя список. – relaxxx

+0

Ну, честно говоря, я не помню, потому что через три с половиной года с тех пор, как я спросил, я почти уверен, что он каким-то образом переделан, и я уже давно оставил эту работу. Суть вопроса заключалась не столько в эффективности (хотя есть справедливая вероятность того, что было достаточно данных, которые я бы не хотел дублировать все это на лету), но больше просто любопытство; казалось странным, что я, похоже, не мог сделать этот частичный сорт и что должен быть какой-то способ его достижения. – Peter

+0

oh: D мой плохой ... Я наткнулся на этот вопрос через поиск не через «страницу активных вопросов» и не осознавал этого :) Я действительно думал, что это активный вопрос. – relaxxx

ответ

12

Как насчет того, чтобы отвязать часть списка, которую вы хотите отсортировать, в отдельный список, , затем используйте специализированный список сортировки, а затем верните его в исходный список?

+2

Это хорошая идея. Легко забыть о мощности метода splice(). – bk1e

+0

+1 Это самый простой способ сделать это. – Nawaz

Смежные вопросы