На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (5) 1 2 [3] 4 5  все  ( Перейти к последнему сообщению )  
> Срочно нужна помощь. , Задачка на c++
    Цитата OpenGL @
    "Закидывать в начало нули" это означает, что сначала должны идти нули в том же порядке, в котором шли, а потом остальные - с аналогичным условием.

    С чего бы это? Этого в компараторе ничем не определялось - а определяется существующим алгоритмом сортировки. Он вообще был вправе все перемешать. Главное условие, которое он не должен нарушить - "ноль меньше нуля".
      Цитата VisualProg @
      В общем, я решу ваш спор:

      Нет. В твоём компараторе cmp(0, -1) == cmp(-1, 0) == true :)
      Вот так будет правильно:
      ExpandedWrap disabled
        if (a.first == 0) return b.first != 0;
        if (b.first == 0) return false;
        return a.first < b.first;


      Добавлено
      Цитата cppasm @
      С какого это фига?
      Ты по первым элементам сравниваешь - по первым тебе и отсортировало.

      Там stable_sort, поэтому нули должны идти ровно в том же порядке, в каком шли изначально.

      Добавлено
      Цитата JoeUser @
      Главное условие, которое он не должен нарушить - "ноль меньше нуля".

      И именно это он в твоей версии компаратора и нарушил.
      Сообщение отредактировано: OpenGL -
        Цитата OpenGL @
        О, а вот и пример того, как ломается уже просто std::sort:

        Да, тут это не работает ... и тем не менее:

        ExpandedWrap disabled
          std::sort(v.begin(), v.end(), [] (const auto &a, const auto &b) -> bool {
            return (a.first == 0);
          });

        Работает просто прекрасно.
          Цитата OpenGL @
          Там stable_sort

          А, сорри. Не заметил, думал там std::sort()
            Цитата JoeUser @
            и тем не менее:

            И тем не менее всё вышесказанное про требование алгоритмами strict weak ordering остаётся в силе - с таким компаратором ты рискуешь в самые неожиданные моменты нарваться на грабли.
              Цитата JoeUser @
              Работает просто прекрасно.
              То, что что-то компилируется и работает никогда не было доказательством корректности, если речь идёт о плюсах :D
                Цитата OpenGL @
                И тем не менее всё вышесказанное про требование алгоритмами strict weak ordering остаётся в силе - с таким компаратором ты рискуешь в самые неожиданные моменты нарваться на грабли.

                Про отсутствие UB и вероятное наличие оверхеда я уже повторял трижды. Ты не услышал. Да, первый мой вариант некорректен - надо было смотреть только "левый" нуль. Пусть он всегда меньше "правого". Это лишь лишняя перестановка. И по ТЗ топикстартера все будет ровно!

                Цитата negram @
                То, что что-то компилируется и работает никогда не было доказательством корректности, если речь идёт о плюсах

                Тут слов нет - согласен и посыпаю голову пепломЪ :) Постарайся развидеть этот мой аргумент :lol:
                  Цитата JoeUser @
                  Про отсутствие UB и вероятное наличие оверхеда я уже повторял трижды.

                  А толку-то от этих повторений, если изначальный мой посыл - что оба твоих компаратора не удовлетворяет контрактам, на которые полагаются функции стандартной библиотеки - это никак не опровергает? Допускаю, что std::sort написать так, чтобы она не работала с антирефлексивным компаратором не так-то просто, но тем не менее твой код от этого говнокодом быть не перестаёт - практически все остальные функции с твоими компараторами тупо не заработают.
                    Цитата OpenGL @
                    практически все остальные функции с твоими компараторами тупо не заработают.

                    А ниче што я это не "презентовал" для фсего? А только для данной темы?
                      Ну начинается :lool:
                      Ладно, раз хочешь флудить, то ок. Твой код не работает в студии в дебаге, ибо она проверяет компараторы на антирефлексивность, и если условие не выполняется - валится с ассертом. Т.е. твой код уже не работает. Что дальше ? Что-то вроде "я не презентовал для работы во всех компиляторах"? :D
                        Цитата OpenGL @
                        Ну начинается :lool:
                        Ладно, раз хочешь флудить, то ок. Твой код не работает в студии в дебаге, ибо она проверяет компараторы на антирефлексивность, и если условие не выполняется - валится с ассертом. Т.е. твой код уже не работает. Что дальше ? Что-то вроде "я не презентовал для работы во всех компиляторах"? :D

                        Да, студии у меня нет, проверить не могу.
                        Но и у меня вопрос!!! Если GCC/Clang во всех ипостасях это кушают, то СТУДИЯ В ДЕБАГЕ - это аргумент? Это окончательная инстанция?

                        Добавлено
                        Скрытый текст
                        Студия - с пальмы слезла пол-часа назад, по сведениям от британских ученых. Есличо.


                        Добавлено
                        Цитата JoeUser @
                        не "презентовал" для фсего? А только для данной темы?

                        а если более точно, то для std::sort
                          Цитата JoeUser @
                          Но и у меня вопрос!!! Если GCC/Clang во всех ипостасях это кушают, то СТУДИЯ В ДЕБАГЕ - это аргумент? Это окончательная инстанция?

                          Нет конечно - окончательная инстанция это стандарт. Но, видимо, для тебя он не авторитет :D
                            Цитата OpenGL @
                            Но, видимо, для тебя он не авторитет

                            05 25. Я стандарт не нарушаю! У меня четкое условие - "если левый аргумент компаратора равен нулю, то результат == true".
                            ЭТО МОЕ УСЛОВИЕ СРАВНЕНИЯ!!!

                            В Стандарте указано что я ОБЯЗАН учитывать ОБА ПАРАМЕТРА компоратора? Что не запрещено, то разрешено.
                            Сообщение отредактировано: JoeUser -
                              Цитата JoeUser @
                              В Стандарте указано что я ОБЯЗАН учитывать ОБА ПАРАМЕТРА компоратора?

                              В Стандарте сказано, что предикат должен обладать свойством транзитивности, а у тебя ее не наблюдается.
                                Цитата 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??? В компораторе два аргумента. Давай-ка цитату из Стандарта. Давай разбираться. Я не то, чтобы чтобы ... ))) Но на слово не верю.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (5) 1 2 [3] 4 5  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0495 ]   [ 17 queries used ]   [ Generated: 16.04.24, 22:50 GMT ]