Тип значения набора должен быть меньше сопоставимого. Вот как контейнер узнает, как элементы связаны друг с другом и в каком порядке (включая отсутствие дубликатов).
Короткая история, сделайте 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};
}