我有一个以类为键的地图。
在这个课程中,我重载了<
运算符,我在这里读到地图会自动使用它进行比较和排序。
编译时出现以下错误:
错误1错误C2664:'std :: pair :: pair(const std :: pair&amp;)':无法转换参数1 '位置'到'位置*常数&amp;' e:\ program files \ visual studio 2013 最终\ VC \包括\ xmemory0
我没有得到真正的意义或我如何避免它。它也没有在我的代码中突出显示任何内容。
这是我的代码,我的类是坐标,我希望它们从左到右,从上到下排序,但逻辑不是问题。
位置文件中显然有更多内容,但我认为这些是相关部分。
的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;
}
Position.h
bool operator<(const Position&) const;
Position.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;
}
}
答案 0 :(得分:3)
将地图重新定义为:
std::map<Position, int> karte;
编译错误是因为您尝试在地图中插入pair<Position, int>
:
Position p1;
<snip>
karte.emplace(p1, 1);
并且您已将地图声明为map<Position*, int>
答案 1 :(得分:3)
如果你需要地图的指针作为指针,你可以创建自己的比较器并将其传递给地图:
struct PositionPointerLesser
{
bool operator() (Position *lhs, Position *rhs) const
{
return *lhs < *rhs; // This calls the operator < in your class
}
};
int main()
{
std::map<Position*, int, PositionPointerLesser> karte;
// ...
}