在C ++中使用QPoint和std :: map

时间:2014-04-28 10:42:00

标签: c++ qt map point

我在矢量中有QPoint变量,我想将它存储在地图中。

std::map<QPoint, int> pointMap;
QPoint t;
int i;
pointMap.insert(std::pair<QPoint,int>(t, i));

如果我使用string,int map,它可以正常工作。但是我无法在地图中使用QPoint。有什么想法吗?

编译器消息:“与(std :: pair)(QPoint&amp;,int)的调用不匹配”

3 个答案:

答案 0 :(得分:2)

我认为问题在于std::map要求实施operator <的类型,但QPoint不需要。要解决此问题,您可以通过以下方式定义地图:

std::map<int, QPoint> pointMap;

其他您需要定义自定义&#34;小于&#34; QPoint的运算符,如:

bool operator <(QPoint point1, QPoint point2)
{
    // Do you logic here, to compare two points.
    return true;
}

答案 1 :(得分:0)

QPoint没有运营商&lt;重载,在插入地图时需要与其他条目进行比较并找到正确的位置。这就是为什么插入不起作用的原因。您可以定义自己的比较方法,并在创建地图时使用它,如

     std::map<T1, T2, less ..>

答案 2 :(得分:0)

只是想指出使用 inline 关键字可能是一个好主意,因为它有助于避免多个定义错误:

inline bool operator<(const QPointF &p1, const QPointF &p2);