我有一个std :: map,我用它来存储x和y坐标的值.我的数据非常稀疏,所以我不想使用数组或向量,这会导致大量的内存浪费.我的数据范围从-250000到250000,但我最多只有几千点.
目前我正在使用两个坐标(即"12x45")创建一个std :: string并将其用作键.这似乎不是最好的方法.
我的其他想法是使用int64并将两个int32推入其中并将其用作密钥.
或者使用具有两个坐标的类.对要用作密钥的类有什么要求?
做这个的最好方式是什么?我宁愿不使用地图地图.
Dav*_*man 115
使用std :: pair <int32,int32>作为密钥:
std::map<std::pair<int,int>, int> myMap;
myMap[std::make_pair(10,20)] = 25;
std::cout << myMap[std::make_pair(10,20)] << std::endl;
Run Code Online (Sandbox Code Playgroud)
Sta*_*ked 32
我通常会解决这样的问题:
struct Point {
int x;
int y;
};
inline bool operator<(const Point& p1, const Point& p2) {
if (p1.x != p2.x) {
return p1.x < p2.x;
} else {
return p1.y < p2.y;
}
}
Run Code Online (Sandbox Code Playgroud)
对要用作密钥的类有什么要求?
映射需要能够判断一个键的值是否小于另一个键的值:默认情况下,这意味着(key1 <key2)必须是有效的布尔表达式,即键类型应该实现'小于'运算符.
map模板还实现了一个重载的构造函数,它允许你传入一个key_compare类型的函数对象的引用,它可以实现比较运算符:这样,或者比较可以实现为这个外部函数对象的方法,而不是需要被烘焙到你的钥匙的任何类型.
| 归档时间: |
|
| 查看次数: |
51442 次 |
| 最近记录: |