以下代码给出错误“binary'<':找不到运算符,它接受'const point'类型的左手操作数(或者没有可接受的转换)”。我如何修复它?
#include <iostream>
#include <map>
using namespace std;
struct point
{
float x;
float y;
public:
void get() {
cin >> x >> y;
}
};
int main()
{
map<point, point> m;
point p1, p2;
p1.get();
p2.get();
m.insert(make_pair(p1,p2));
}
答案 0 :(得分:3)
您必须为<
定义point
运算符,因为默认情况下std::map
会将其用于比较键。
#include <iostream>
#include <map>
using namespace std;
struct point
{
float x;
float y;
public:
// add this function
bool operator<(const point& p) const {
// example implementation
if (x < p.x) return true;
return x == p.x && y < p.y;
}
void get() {
cin >> x >> y;
}
};
int main()
{
map<point, point> m;
point p1, p2;
p1.get();
p2.get();
m.insert(make_pair(p1,p2));
}
您还可以在std::map
的第三个模板参数中指定比较器,但我认为定义<
运算符是一种更简单的方法。