C++:STL 映射,插入新值不起作用
C++: STL map, inserting new value doesn't work
我正在尝试使用 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;
}
因此,当您执行代码时,不会显示新插入的值。实际上,如果您尝试更新旧的,那也不起作用。谁能让我知道出了什么问题。为什么会这样?
小于比较必须实现严格的弱排序。这是一个要求,没有它,地图将无法工作。您的小于运算符不尊重这一点。
这是一个可行的比较示例:
#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__
因为它是一个保留名称。
相关文章:
- C++使用另一个数组和新值初始化数组
- 在二叉搜索树中插入新元素
- 变体 - 分配新值时是否清理旧值?
- C++:我可以在线程仍在运行时为线程提供新值,还是必须先结束它?
- C++类析构函数使用新值而不是实际值
- 插入新键时,它会更改现有键值的地址吗?
- 如何在插入过程中更改插入的值
- 写入新值是构成前增量表达式"value computation"的一部分,还是"side effect"?
- 向量<pointer>:插入(迭代器,指针)插入垃圾值
- 在 std::unordered_map 中插入新的键/值对会导致"out of range"异常
- 有没有办法通过插入新类型名称而不是 int 来使用 2 位大小类型而不是 int?
- 在指向对象的指针的动态数组上插入新元素
- std::map::emplace无法解决,但插入右值有效 - 为什么?
- 在动态分配的二维矩阵中插入新列
- 我们是否可以保证任何原子写入都会立即将原子变量的新值存储在主存储器中?
- C++ - 读取进程内存到缓冲区,写入进程内存(同一缓冲区上的新值)将缓冲区恢复为旧值
- 将新值添加到链表中
- 在数组的元素中插入一个新值,然后移动其余元素
- C++:STL 映射,插入新值不起作用
- 矢量作为映射值,插入新的关键点并立即返回c++