c++ - 在具有 std::pair 键和值的映射中添加 b2vec2

标签 c++ box2d

当我尝试向我的 map 添加元素时出现错误,这是我的简化代码:

我有一张 map :

std::map<std::pair<std::string, std::pair<int, b2Vec2> >, std::pair<std::string, std::pair<int, b2Vec2> > > myMap; `  

b2Vec2 rVec (1, 1)  
std::pair<std::string, std::pair<int, b2Vec2> > partA (std::make_pair ("test", std::make_pair(1, rVec ) ) );  
std::pair<std::string, std::pair<int, b2Vec2> > partB (std::make_pair ("testb", std::make_pair(1, rVec ) ) );` 

myMap[partA] = partB; //When I add this line i get an error when compiling.`

我收到错误:“二进制表达式的操作数无效('const b2Vec2' 和 'const b2Vec2')。” 如果我在 myMap 定义和初始化中用 int 类型替换每个 b2Vec2 类型,它就可以工作。所以我认为 b2Vec2 只是一个问题,但我不明白。

最佳答案

std::map 中用作键的类型需要为其定义一个小于比较运算符 ( operator< )。 std::pair定义其中之一,这需要 operator<为对中的类型定义。

在您的情况下,您会收到编译错误,因为 b2Vec2类型未定义 operator< .

关于c++ - 在具有 std::pair 键和值的映射中添加 b2vec2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45850143/

相关文章:

ios - Contre Jour 中的弹性触手等图形效果

performance - Box2d raycast 与 AABB 查询性能

iphone - Cocos2d/Box2d CCRibbon 碰撞检测

c++ - readv(), writev(), WSARecv(), WSASend()

c++ - 错误 C2512 : no appropriate default constructor available - Why if properties are being initialized in constructor?

c++ - 在 C++ 中,如果复制一个对象是可能的,但确实很昂贵而且通常不是一个好主意,您是否仍然应该使用复制构造函数来实现复制?

android - Box2D 是完全确定的吗?

c++ - 从数组中查找元素

c++ - silence -Wparentheses-相等错误

java - 在 LibGDX 中实现 Box2D 碰撞的简洁方法