Зачем изначально было делать std::sort на RandomAccessIterator?
Во первых всегда можно разделить имплементации для рандом и бидирекшен.
Во вторых обычно используемый introsort отлично работает с обьеими видами итераторов.
И наоборот std::lower_bound эффективно работать может только с RandomAccessIterator но принимает Forward.
Это меня одного озадачивает ?
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re: std::sort не работает на бидирекшен итераторах
Здравствуйте, minorlogic, Вы писали:
M>Собственно идеологический вопрос.
... M>Это меня одного озадачивает ?
согласен, не симметрично. можно запилить запрос в https://groups.google.com/a/isocpp.org/forum/?fromgroups#!forum/lib-proposals (главное сыроежку туда не пускать).
может быть сочли редко-используемым, может было мало времени и просмотрели(stl вообще предложили на очень позднем этапе стандартизации), может ещё что.
примечательно что на MSVC10 std::stable_sort работает с std::list
Re[2]: std::sort не работает на бидирекшен итераторах
кстати, может они планирует сделать это в контексте концепций. То есть не будут тратить время на формальный proposal пока нет концепций. Так как с ними определение будет по-другому выглядеть.
Re: std::sort не работает на бидирекшен итераторах
Здравствуйте, minorlogic, Вы писали:
M>Собственно идеологический вопрос.
M>Зачем изначально было делать std::sort на RandomAccessIterator?
M>Во первых всегда можно разделить имплементации для рандом и бидирекшен. M>Во вторых обычно используемый introsort отлично работает с обьеими видами итераторов.
ORLY? И как выбирать pivor element, используя median three, если нет RandomAccess?
Re[2]: std::sort не работает на бидирекшен итераторах
Здравствуйте, minorlogic, Вы писали:
M>Здравствуйте, sdf, Вы писали:
sdf>>ORLY? И как выбирать pivor element, используя median three, если нет RandomAccess?
M>Например так же как и для RandomAccess. Асимптотику это не изменит.
ORLY?
Так же, как RandomAccess и без изменения асимптотики, его выбирать нельзя, т.к. для RandomAccess поиск серединного элемента занимает O(1), а для bidirectional чтобы получить средний элемент вам нужно будеть сделать O(длины участка/2) вызовов ++
Re[4]: std::sort не работает на бидирекшен итераторах
Здравствуйте, sdf, Вы писали:
sdf>Здравствуйте, minorlogic, Вы писали:
sdf>Так же, как RandomAccess и без изменения асимптотики, его выбирать нельзя, т.к. для RandomAccess поиск серединного элемента занимает O(1), а для bidirectional чтобы получить средний элемент вам нужно будеть сделать O(длины участка/2) вызовов ++
Хотя, верно, все равно потом делается прохол по всему участку. Будет медленнее. но асмтотика останется той же. Вопрос закрыт.
Re: std::sort не работает на бидирекшен итераторах
Здравствуйте, minorlogic, Вы писали:
M>Собственно идеологический вопрос.
M>Зачем изначально было делать std::sort на RandomAccessIterator?
M>Во первых всегда можно разделить имплементации для рандом и бидирекшен.
Вроде бы основная проблема была в том, что разделить имплементацию для рандом и бидерекшен во время включения в стандарт STL, было нетривиально.
Концептов в С++ нет до сих пор, а SFINAE тогде вроде еще не было.
Re[2]: std::sort не работает на бидирекшен итераторах
Здравствуйте, sdf, Вы писали:
M>>Зачем изначально было делать std::sort на RandomAccessIterator? M>>Во первых всегда можно разделить имплементации для рандом и бидирекшен. sdf>Вроде бы основная проблема была в том, что разделить имплементацию для рандом и бидерекшен во время включения в стандарт STL, было нетривиально. sdf>Концептов в С++ нет до сих пор, а SFINAE тогде вроде еще не было.
Здравствуйте, sdf, Вы писали:
sdf>Вроде бы основная проблема была в том, что разделить имплементацию для рандом и бидерекшен во время включения в стандарт STL, было нетривиально.
Дык и обобщенную можно собрать без накладных расходов.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[4]: std::sort не работает на бидирекшен итераторах
Piko:
P>кстати, может они планирует сделать это в контексте концепций.
Насколько я помню, первый стандарт с Concepts планировали выпустить примерно в 2022 году. Тем, кому хочется иметь дело с этой фичей, осталось подождать совсем чуть-чуть
Re[5]: std::sort не работает на бидирекшен итераторах
Здравствуйте, Masterkent, Вы писали:
P>>кстати, может они планирует сделать это в контексте концепций. M>Насколько я помню, первый стандарт с Concepts планировали выпустить примерно в 2022 году. Тем, кому хочется иметь дело с этой фичей, осталось подождать совсем чуть-чуть
а когда следующий?
по мне так то лучше дольше и надёжней.
по поводу концепций — я больше всего жду аксиомы.
Re: std::sort не работает на бидирекшен итераторах
Здравствуйте, minorlogic, Вы писали:
M>Забавное наблюдение. Наколеночная qsort обогнала MSVC2010 реализацию std::list<>.sort на случайных данных , раза в 2ва
2. ISO, list sort:
"Effects: Sorts the list according to the operator< or the comp function object. This operation shall be
stable: the relative order of the equivalent elements is preserved. If an exception is thrown the order
of the elements in *this is unspecified. Does not affect the validity of iterators and references.
23 Complexity: Approximately N logN comparisons, where N is distance(begin(), end())."
Стабильность + Сложность(даже не сложность, а количество сравнений). А что у тебя?
Re[3]: std::sort не работает на бидирекшен итераторах
Здравствуйте, minorlogic, Вы писали:
P>>1. попробуй отсортировать последовательность {N, N-1, N-2, N-3, N-4 ...} M>Зачем мне ?
ну ты же говоришь, что типа у тебя быстрее в два раза.
Сравни на этих данных
P>>Стабильность + Сложность(даже не сложность, а количество сравнений). А что у тебя? M>Написал же, "наколеночный qsort"
Здравствуйте, minorlogic, Вы писали:
P>>ну ты же говоришь, что типа у тебя быстрее в два раза. P>>Сравни на этих данных M>Я написал же, что на случайных данных, внимательно читай.
list.sort обладает свойством стабильности + его сложность всегда O(NlogN).
В твоём же варианте стабильности нет. И сложность может взрываться в самый неподходящий момент, на самом не подходящем N, до O(N^2).
Ну ещё хинт.
Сравни std::sort и std::stable_sort.
В чём вообще смысл? Что ты хотел показать своим сравнением? То что qsort может обгонять стабильную сортировку с O(NlogN) сложностью? Ну и?
Re[7]: std::sort не работает на бидирекшен итераторах