c ++ добавление struct var к множеству переменных, вызывающих ошибку - PullRequest
0 голосов
/ 18 марта 2020

У меня есть довольно простой код C ++, который создает точки из определения структуры и пытается добавить эти точки в набор.

#include <stdio.h>       /* printf */
#include <bits/stdc++.h> /* vector of strings */
using namespace std;

struct point
{
    int x;
    int y;
};

int main(){

   for(int i = 0; i <= 6; i++){
        set<point> visited_points;
        point visited_point{4, 1};
        visited_points.insert(visited_point);

   }
}

Но этот код выдает большую консольную ошибку, когда я запускаю его, говоря:

In file included from /usr/include/c++/7/string:48:0,
                 from /usr/include/c++/7/bits/locale_classes.h:40,
                 from /usr/include/c++/7/bits/ios_base.h:41,
                 from /usr/include/c++/7/ios:42,
                 from /usr/include/c++/7/istream:38,
                 from /usr/include/c++/7/sstream:38,
                 from /usr/include/c++/7/complex:45,
                 from /usr/include/c++/7/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:52,
                 from ex.cpp:2:
/usr/include/c++/7/bits/stl_function.h: In instantiation of ‘constexpr bool std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = point]’:
/usr/include/c++/7/bits/stl_tree.h:2038:11:   required from ‘std::pair<std::_Rb_tree_node_base*, std::

........

/usr/include/c++/7/bits/stl_function.h:386:20: note:   ‘const point’ is not derived from ‘const std::__cxx11::sub_match<_BiIter>’
       { return __x < __y; }
                ~~~~^~~~~

Есть ли часть моего кода, которую я сделал неправильно? Мне просто нужен способ отслеживать несколько точек в списке.

1 Ответ

4 голосов
/ 18 марта 2020

Наборы упорядочены, поэтому элементам нужна функция упорядочения. У вашего класса нет этого. Добавьте подходящее определение

bool operator<(const Point& a, const Point& b);

Например,

bool operator<(const Point& a, const Point& b)
{
    return a.x < b.x || a.x == b.x && a.y < b.y;
}

Но какую бы функцию заказа вы ни выбрали, она должна определять строго слабое упорядочение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...