Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.134.104.173] |
|
Страницы: (5) 1 2 [3] 4 5 все ( Перейти к последнему сообщению ) |
Сообщ.
#31
,
|
|
|
Цитата OpenGL @ "Закидывать в начало нули" это означает, что сначала должны идти нули в том же порядке, в котором шли, а потом остальные - с аналогичным условием. С чего бы это? Этого в компараторе ничем не определялось - а определяется существующим алгоритмом сортировки. Он вообще был вправе все перемешать. Главное условие, которое он не должен нарушить - "ноль меньше нуля". |
Сообщ.
#32
,
|
|
|
Нет. В твоём компараторе cmp(0, -1) == cmp(-1, 0) == true Вот так будет правильно: if (a.first == 0) return b.first != 0; if (b.first == 0) return false; return a.first < b.first; Добавлено Цитата cppasm @ С какого это фига? Ты по первым элементам сравниваешь - по первым тебе и отсортировало. Там stable_sort, поэтому нули должны идти ровно в том же порядке, в каком шли изначально. Добавлено Цитата JoeUser @ Главное условие, которое он не должен нарушить - "ноль меньше нуля". И именно это он в твоей версии компаратора и нарушил. |
Сообщ.
#33
,
|
|
|
Да, тут это не работает ... и тем не менее: std::sort(v.begin(), v.end(), [] (const auto &a, const auto &b) -> bool { return (a.first == 0); }); Работает просто прекрасно. |
Сообщ.
#34
,
|
|
|
Цитата OpenGL @ Там stable_sort А, сорри. Не заметил, думал там std::sort() |
Сообщ.
#35
,
|
|
|
Цитата JoeUser @ и тем не менее: И тем не менее всё вышесказанное про требование алгоритмами strict weak ordering остаётся в силе - с таким компаратором ты рискуешь в самые неожиданные моменты нарваться на грабли. |
Сообщ.
#36
,
|
|
|
Цитата JoeUser @ То, что что-то компилируется и работает никогда не было доказательством корректности, если речь идёт о плюсах Работает просто прекрасно. |
Сообщ.
#37
,
|
|
|
Цитата OpenGL @ И тем не менее всё вышесказанное про требование алгоритмами strict weak ordering остаётся в силе - с таким компаратором ты рискуешь в самые неожиданные моменты нарваться на грабли. Про отсутствие UB и вероятное наличие оверхеда я уже повторял трижды. Ты не услышал. Да, первый мой вариант некорректен - надо было смотреть только "левый" нуль. Пусть он всегда меньше "правого". Это лишь лишняя перестановка. И по ТЗ топикстартера все будет ровно! Цитата negram @ То, что что-то компилируется и работает никогда не было доказательством корректности, если речь идёт о плюсах Тут слов нет - согласен и посыпаю голову пепломЪ Постарайся развидеть этот мой аргумент |
Сообщ.
#38
,
|
|
|
Цитата JoeUser @ Про отсутствие UB и вероятное наличие оверхеда я уже повторял трижды. А толку-то от этих повторений, если изначальный мой посыл - что оба твоих компаратора не удовлетворяет контрактам, на которые полагаются функции стандартной библиотеки - это никак не опровергает? Допускаю, что std::sort написать так, чтобы она не работала с антирефлексивным компаратором не так-то просто, но тем не менее твой код от этого говнокодом быть не перестаёт - практически все остальные функции с твоими компараторами тупо не заработают. |
Сообщ.
#39
,
|
|
|
Цитата OpenGL @ практически все остальные функции с твоими компараторами тупо не заработают. А ниче што я это не "презентовал" для фсего? А только для данной темы? |
Сообщ.
#40
,
|
|
|
Ну начинается
Ладно, раз хочешь флудить, то ок. Твой код не работает в студии в дебаге, ибо она проверяет компараторы на антирефлексивность, и если условие не выполняется - валится с ассертом. Т.е. твой код уже не работает. Что дальше ? Что-то вроде "я не презентовал для работы во всех компиляторах"? |
Сообщ.
#41
,
|
|
|
Цитата OpenGL @ Ну начинается Ладно, раз хочешь флудить, то ок. Твой код не работает в студии в дебаге, ибо она проверяет компараторы на антирефлексивность, и если условие не выполняется - валится с ассертом. Т.е. твой код уже не работает. Что дальше ? Что-то вроде "я не презентовал для работы во всех компиляторах"? Да, студии у меня нет, проверить не могу. Но и у меня вопрос!!! Если GCC/Clang во всех ипостасях это кушают, то СТУДИЯ В ДЕБАГЕ - это аргумент? Это окончательная инстанция? Добавлено Скрытый текст Студия - с пальмы слезла пол-часа назад, по сведениям от британских ученых. Есличо. Добавлено Цитата JoeUser @ не "презентовал" для фсего? А только для данной темы? а если более точно, то для std::sort |
Сообщ.
#42
,
|
|
|
Цитата JoeUser @ Но и у меня вопрос!!! Если GCC/Clang во всех ипостасях это кушают, то СТУДИЯ В ДЕБАГЕ - это аргумент? Это окончательная инстанция? Нет конечно - окончательная инстанция это стандарт. Но, видимо, для тебя он не авторитет |
Сообщ.
#43
,
|
|
|
Цитата OpenGL @ Но, видимо, для тебя он не авторитет 05 25. Я стандарт не нарушаю! У меня четкое условие - "если левый аргумент компаратора равен нулю, то результат == true". ЭТО МОЕ УСЛОВИЕ СРАВНЕНИЯ!!! В Стандарте указано что я ОБЯЗАН учитывать ОБА ПАРАМЕТРА компоратора? Что не запрещено, то разрешено. |
Сообщ.
#44
,
|
|
|
Цитата JoeUser @ В Стандарте указано что я ОБЯЗАН учитывать ОБА ПАРАМЕТРА компоратора? В Стандарте сказано, что предикат должен обладать свойством транзитивности, а у тебя ее не наблюдается. |
Сообщ.
#45
,
|
|
|
Цитата shm @ В Стандарте сказано, что предикат должен обладать свойством транзитивности Цитата Транзитивность — свойство бинарного отношения. Бинарное отношение R {\displaystyle R} R на множестве X {\displaystyle X} X называется транзитивным, если для любых трёх элементов множества a , b , c {\displaystyle a,b,c} a,b,c выполнение отношений a R b {\displaystyle aRb} aRb и b R c {\displaystyle bRc} bRc влечёт выполнение отношения a R c {\displaystyle aRc} aRc. WTF??? В компораторе два аргумента. Давай-ка цитату из Стандарта. Давай разбираться. Я не то, чтобы чтобы ... ))) Но на слово не верю. |