定义地图<ivec3, my_custom_class*>
define map<ivec3, my_custom_class*>
我正在尝试定义一个具有键 glm::ivec3
和值 Chunk*
的映射,它是我创建的 class:
Main.cpp 看起来像这样:
#include <map>
#include <Chunk.h>
std::map<glm::ivec3, Chunk*> chunks;
Chunk.h 看起来像这样:
class Chunk {
public:
Chunk(glm::mat4 transform, glm::ivec3 position) :
transform(transform), position(position)
{
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glGenBuffers(1, &EBO);
}
Chunk(int x, int y) : _x(x), _y(y) {}
~Chunk() {}
bool operator<(const Chunk& other) const {
return (_x < other._x) || (!(other._x < _x) && (_y < other._y));
}
// ...
private:
int _x, _y;
unsigned int VBO, VAO, EBO;
// ...
};
但我一直收到这个错误`:
binary '<': 'const _Ty' does not define this operator or a conversion
to a type acceptable to the predefined operator
我该如何解决这个问题?感谢您的宝贵时间!
文档:https://en.cppreference.com/w/cpp/container/map
std::map is a sorted associative container that contains key-value
pairs with unique keys. Keys are sorted by using the comparison
function Compare
如果您不提供 Compare
函数(用于比较键,因此对键进行排序以便可以通过地图代码快速找到确定的键)那么通常的(或重载)[=使用 11=]。
碰巧 glm::ivec3
没有实现 '<
' 重载,然后编译器报错。
您可以自己使用 class,派生自 glm::ivec3
,实现了 <
比较器。或者将您自己的 Compare
提供给 std::map ctor。
这里 https://en.cppreference.com/w/cpp/container/map/map 你有一个示例,其中 class 'PointCmp' 用作“比较”参数。
我正在尝试定义一个具有键 glm::ivec3
和值 Chunk*
的映射,它是我创建的 class:
Main.cpp 看起来像这样:
#include <map>
#include <Chunk.h>
std::map<glm::ivec3, Chunk*> chunks;
Chunk.h 看起来像这样:
class Chunk {
public:
Chunk(glm::mat4 transform, glm::ivec3 position) :
transform(transform), position(position)
{
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glGenBuffers(1, &EBO);
}
Chunk(int x, int y) : _x(x), _y(y) {}
~Chunk() {}
bool operator<(const Chunk& other) const {
return (_x < other._x) || (!(other._x < _x) && (_y < other._y));
}
// ...
private:
int _x, _y;
unsigned int VBO, VAO, EBO;
// ...
};
但我一直收到这个错误`:
binary '<': 'const _Ty' does not define this operator or a conversion to a type acceptable to the predefined operator
我该如何解决这个问题?感谢您的宝贵时间!
文档:https://en.cppreference.com/w/cpp/container/map
std::map is a sorted associative container that contains key-value pairs with unique keys. Keys are sorted by using the comparison function Compare
如果您不提供 Compare
函数(用于比较键,因此对键进行排序以便可以通过地图代码快速找到确定的键)那么通常的(或重载)[=使用 11=]。
碰巧 glm::ivec3
没有实现 '<
' 重载,然后编译器报错。
您可以自己使用 class,派生自 glm::ivec3
,实现了 <
比较器。或者将您自己的 Compare
提供给 std::map ctor。
这里 https://en.cppreference.com/w/cpp/container/map/map 你有一个示例,其中 class 'PointCmp' 用作“比较”参数。