C ++ инициализирует набор структур - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь создать набор структуры, но мой код продолжает получать ошибки, и я не могу найти что-либо в Интернете.

struct smove {

    int src;
    int dst;
};

int main()
{

    smove moov;
    moov.dst = 1;
    moov.src = 2;
    set<struct smove> moovs = {moov};
    return 0;
}

1 Ответ

0 голосов
/ 01 ноября 2018

Тип значения набора должен быть меньше сопоставимого. Вот как контейнер узнает, как элементы связаны друг с другом и в каком порядке (включая отсутствие дубликатов).

Короткая история, сделайте operator< для smove.

Длинная история, ну, в общем, длиннее, потому что этот оператор должен работать определенным образом, но вы можете прочитать об этом . А пока вот простой пример, который использует std::tie для быстрого получения легального заказа:

#include <set>
#include <tuple>

struct smove
{
    int src;
    int dst;
};

bool operator<(const smove& lhs, const smove& rhs)
{
    return std::tie(lhs.src, lhs.dst) < std::tie(rhs.src, rhs.dst);
}

int main()
{
    smove moov;
    moov.dst = 1;
    moov.src = 2;
    std::set<smove> moovs = {moov};
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...