gpt4 book ai didi

c++ - 创建 std::pair 时出现“operator<”错误

转载 作者:行者123 更新时间:2023-11-27 22:58:19 30 4
gpt4 key购买 nike

我已经有了解决方法,但仍想了解这个问题。

我有一个 multimap

multimap<QPoint,Figure*> mymap;

QPoint 是 Qt 5.4 中的一个类。 Figure* 是指向我自己炮制的类(class)。

现在我想向该 map 添加元素。

这个示例工作正常:

multimap<int,int> test;
test.insert(pair<int,int>(41,43));

和这个一样(被称为解决方法)

std::pair<QPoint,Figure*> p;
p.first = pos;
p.second = sub_fig;
mymap.insert(p);

然而,普通的第一 react

std::pair<QPoint,Figure*> p(pos, sub_fig);

编译器在该行的状态是这样的:

[..]
scanner.cpp:264:17: required from here
/usr/include/c++/4.9/bits/stl_function.h:371:20: error: no match for
‘operator<’ (operand types are ‘const QPoint’ and ‘const QPoint’)
{ return __x < __y; }
[..]

随后是通常长达 5 公里的堆叠式 STL 错误消息。第一:“类型”不是 QPoint 和 QPoint。他们是,作为如上所述,QPoint 和 Figure*。

有谁能解开这个谜吗?

更正

毕竟我的解决方法也不起作用。我忘记了取消评论 res.insert(p);

这里是完整的相关代码:

multimap<QPoint,Figure*> res;
// ...
vector<Figure*> stack = figure->get_above_figure_stack();
for (vector<Figure*>::const_iterator CI2=stack.begin();
CI2!=stack.end();CI2++)
{
// ..
Figure* sub_fig = *CI2;
std::pair<QPoint,Figure*> p;
p.first = pos;
p.second = sub_fig;
res.insert(p); // <- The bad line.
}

最佳答案

multimap需要键的排序关系,它的默认值是使用 < (以 std::less 为幌子)。

QPoint没有 operator< 的过载,编译器提示它不存在。

提供一个并不难:

bool operator< (const QPoint& lhs, const QPoint& rhs)
{
return lhs.x() < rhs.x() || (lhs.x() == rhs.x() && lhs.y() < rhs.y());
}

bool lessQPoints (const QPoint& lhs, const QPoint& rhs)
{
return lhs.x() < rhs.x() || (lhs.x() == rhs.x() && lhs.y() < rhs.y());
}

multimap<QPoint, Figure*, lessQPoints> mymap;

关于c++ - 创建 std::pair<A,B> 时出现“operator<”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30327194/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com