我正在尝试使用STL C ++创建地图。但我遇到了问题,我无法弄清楚什么是错的。
出于演示目的,我在这里放下了我的代码。
#include <map>
#include <iostream>
using namespace::std;
struct COORD{
int X;
int Y;
bool operator<(const COORD &other) const { return X == other.X && Y == other.Y;}
COORD(int x, int y) {
X = x;
Y = y;
}
};
struct CAR{
double speed;
double model;
double direc;
CAR() {}
CAR(double c1, double c2, double c3) {
speed = c1;
model = c2;
direc = c3;
}
};
int main(int argc, char **argv) {
map <COORD, CAR> p;
p.insert(pair<COORD, CAR>(COORD(20, 20), CAR(10.0, 10.0, 10.0)));
p.insert(pair<COORD, CAR>(COORD(20, 30), CAR(20.0, 10.0, 10.0)));
CAR c1 = p.at(COORD(20, 30));
cout << c1.speed << "\n";
return 0;
}
因此,当您执行代码时,不会显示新插入的值。实际上,如果您尝试更新也不起作用的旧版本。任何人都可以让我知道什么是错的。为什么会这样?
答案 0 :(得分:13)
比较必须实施strict weak ordering。这是一项要求,没有这项要求,地图就无法运作。你的不足运营商不尊重这一点。
这是一个可行的比较示例:
#include <tuple> // for std::tie
bool operator<(const COORD &other) const
{
return std::tie(X, Y) < std::tie(other.X, other.Y);
}
其中std::tie
比较是词典编纂,首先使用X
,然后使用Y
。我还将类的名称更改为COORD
,因为__COORD__
是保留名称。