【发布时间】:2015-06-21 14:02:56
【问题描述】:
我有一个以类为键的地图。
在这个类中,我重载了< 运算符,我在这里读到地图会自动使用它进行比较和排序。
编译时出现如下错误:
错误 1 错误 C2664: 'std::pair::pair(const std::pair &)' : 无法将参数 1 从 'Position' 到 'Position *const &' e:\program files\visual studio 2013 终极\vc\include\xmemory0
我不明白这真正意味着什么,也不知道如何避免它。它也没有突出显示我的代码中的任何内容。
这是我的代码,我的类是坐标,我希望它们从左到右,从上到下排序,但这里的逻辑不是问题。
Position 文件中显然还有更多内容,但我认为这些是相关部分。
main.cpp
int main()
{
std::map<Position*, int> karte;
Position p1;
p1.setX(0);
p1.setY(0);
Position p2;
p2.setX(0);
p2.setY(1);
Position p3;
p3.setX(1);
p3.setY(0);
Position p4;
p4.setX(1);
p4.setY(1);
karte.emplace(p1, 1);
karte.emplace(p2, 2);
karte.emplace(p3, 3);
karte.emplace(p4, 4);
for (auto& x : karte)
{
std::cout << x.first->toString() << ": " << x.second << std::endl;
}
return 0;
}
位置.h
bool operator<(const Position&) const;
位置.cpp
bool Position::operator<(const Position &position) const
{
if ((x_ < position.x_) && (y_ == position.y_))
{
return true;
}
if (x_ > position.x_ && y_ < position.y_)
{
return true;
}
if (x_ == position.x_ && y_ < position.y_)
{
return true;
}
else
{
return false;
}
}
【问题讨论】:
-
地图的键是指针。您的比较器不比较指针。
-
您正在尝试将
Position存储在声明为存储Position*的容器中 -
事实上,在这种情况下甚至没有调用自定义比较器。
-
如何更改要调用的比较器?地图中必须有
Position*,否则很多其他代码都不起作用。 -
@MikeSeymour 你不能为指针重新定义运算符
标签: c++ class c++11 dictionary