{}
explicit Line(double x1, double y1, double x2, double y2)
{
px1 = x1; py1 = y1; px2 = x2; py2 = y2;
}
double px1{0}; double py1{0}; double px2{0}; double py2{0};
bool operator< (const Line& rhs) const {
return std::tie(px1, py1, px2, py2) < std::tie(rhs.px1, rhs.py1, rhs.px2, rhs.py2);
}
};
QMap<Line, QString> paths;
Line l1{1,1, 20, 20};
paths.insert(l1, QString("ONE") );
qDebug() << m[l1];
Почему может не работать такой код?
если использую std::map все норм
весь код:
https://gcc.godbolt.org/z/aGdPcETzz
а где объект m определён?
Вынеси operator< из класса inline bool operator<(const Line &e1, const Line &e2)
Спасибо! Имя пришло из верхней записи!
А чем QLine не угодил?
вынес наружу constexpr bool operator< (const Line& lhs, const Line& rhs) { return std::tie(lhs.px1, lhs.py1, lhs.px2, lhs.py2) < std::tie(rhs.px1, rhs.py1, rhs.px2, rhs.py2); } работает, но ведь это чистая орфография +.- читабильность или есть более глубокие подводные камни?
Тут скорей научный интерес, коллега спросил про класс в виде ключа, так что Line это упрощение его линии ... но вот если в классе вектора были бы то по идее не должно было работать т.к. можно изменить вектор и поменяется позиция вершины ....
Для ключа QMap нужна перегрузка функции qHash
Обсуждают сегодня