170 похожих чатов

Есть у меня класс есть у класса поля. для простоты назовём

их просто fld0 fld1 fld2 итд
Хочется мне для этого класса написать operator less.

как сделать так, чтобы можно было прописать порядок, в котором их сравнивать? без вложенных if-else потипу

if(fld0==other.fld0)
{
if(fld1==other.fld1)
{....}
return fld1<other.fld1
}
return fld0<other.fld0
}

18 ответов

8 просмотров

return std::tie(fld0, fld1, fld2) < std::tie(other.fld0, other.fld1, other.fld2)

🐈- Автор вопроса

@zamazan4ik ты не поверишь... он обёрнут

🐈- Автор вопроса
Alexander Karaev
return std::tie(fld0, fld1, fld2) < std::tie(other...

ухты. видимо придется прочитать про tie

Alexander Karaev
return std::tie(fld0, fld1, fld2) < std::tie(other...

более продвинуто: auto tie = [](const auto& cls) { return std::tie(cls.fld0, cls.fld1, cls.fld2); }; return tie(*this) < tie(rhs);

🐈
ухты. видимо придется прочитать про tie

он возвращает tuple из ссылок, а tuple из коробки поддерживают лексикографическое сравнение

🐈
@zamazan4ik ты не поверишь... он обёрнут

хз, у меня в клиенте текст не синий

🐈- Автор вопроса
Alexander "SonnySlave" Zaitsev
хз, у меня в клиенте текст не синий

странная херня. видимо где-т кавычку потерял

Alexander Karaev
более продвинуто: auto tie = [](const auto& cls) {...

class Foo { auto as_tie() const; }; auto Foo::as_tie() const { return std::tie(fld0, fld1, fld2); }

🐈- Автор вопроса
Alexander Karaev
более продвинуто: auto tie = [](const auto& cls) {...

хм, а ведь получается что и для == мы можем тоже его же использовать? (не нааааадо мне про <==>. Рааано еще)

Constantine Drozdov
class Foo { auto as_tie() const; }; auto Foo:...

Осталось поля автоматом подсасывать

🐈- Автор вопроса
Constantine Drozdov
class Foo { auto as_tie() const; }; auto Foo:...

вот я думаю как бы это в отдельный шаблон зафеячить. ибо у меня таких классов много

🐈- Автор вопроса
Denis P
Осталось поля автоматом подсасывать

тут нужно ручное управление порядком сравнения

🐈
тут нужно ручное управление порядком сравнения

Зачем? Обычно есть структуру и достаточно просто поля через tie сравнить, что в том же расте делается одной декларацией над структурой

🐈
вот я думаю как бы это в отдельный шаблон зафеячит...

шаблон ты не зафеячишь, а вот макрос небольшой - вполне: DEFINE_FIELDS(a, b, c) => auto as_tie() const { return std::tie(a, b, c); };

🐈- Автор вопроса
Denis P
Зачем? Обычно есть структуру и достаточно просто п...

для == достаточно сравнить в хаотичном попядке. для < порядок важен

🐈
для == достаточно сравнить в хаотичном попядке. дл...

Ну не всегда, логика == на самом деле может быть любой, но даже если так, зачем сравнивать хаотично, что сложнее, если можно сравнивать последовательно )

🐈- Автор вопроса
Alexander Karaev
шаблон ты не зафеячишь, а вот макрос небольшой - в...

а можем ли мы сделать... class Compareable { virtual auto AsTie() const = 0; operator ravno(); Operstor menshe(); ? компилятор говориь мне что virtual auto эт плохо

🐈
а можем ли мы сделать... class Compareable { virt...

Нет, AsTie() возвращает std::tuple<type1&, type2&, ...>

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
что насчет пагинга? на осдеве непонятно(
Vi Chapmann 🪙
26
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Народ, кто шарит в расширенных разделах (EBR/EPR) на дисках с разметками MBR? Везде пишут (в вики рус/англ) в частности + другие источники смотрел, что первый сектор расширенн...
Eugene Krasnikov (ᴊɪɴ x)
1
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Ребят, что лучше для реверса: гидра или ида?
En Vind Av Sorg
26
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
24
помогите решить вопрос ктото решал это?
Михаил Helper
9
что лучше для раста, Clion или IntellJ IDEA?
dbxty
11
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Карта сайта