我有2个enum
s属于较新的枚举类类型。
enum class Action
{
Move,
Attack,
Die,
Splash,
Idle
};
enum class Facing
{
Left,
LeftUp,
LeftDown,
Up,
Down,
Right,
RightUp,
RightDown
};
我希望将这些内容存储在多图中:
std::multimap<Entity::Facing,std::pair<Entity::Action,std::unique_ptr<Animation>>> listAnimation;
关键是:面对,对是实体+动画的动作。
这是我插入它的方式:
std::unique_ptr<Animation> splashUp (new Animation());
splashUp->setSpriteSheet(*texture);
splashUp->addFrame(sf::IntRect(3584,256,128,128));
splashUp->addFrame(sf::IntRect(3712,256,128,128));
splashUp->addFrame(sf::IntRect(3840,256,128,128));
splashUp->addFrame(sf::IntRect(3968,256,128,128));
splashUp->addFrame(sf::IntRect(4096,256,128,128));
splashUp->addFrame(sf::IntRect(4224,256,128,128));
splashUp->addFrame(sf::IntRect(4352,256,128,128));
splashUp->addFrame(sf::IntRect(4480,256,128,128));
this->listAnimation.insert(Entity::Facing::Up, std::make_pair(Entity::Action::Splash, std::move(splashUp)));
这是一个错误,即使经过大量的谷歌搜索,我也无法解决这个问题:
错误C2664:&#39; std :: _ Tree_iterator&lt; _Mytree&gt; 的std ::多重映射&LT; _Kty,_Ty&GT; ::插入件(STD :: _ Tree_const_iterator&LT; _Mytree&GT;,const的 的std ::对&LT; _Ty1,_Ty2&GT; &安培;)&#39; :无法转换参数1 &#39;实体::面对&#39;到&#39; std :: _ Tree_const_iterator&lt; _Mytree&gt;&#39; 1 GT;
用1> [1> _Mytree =标准:: _ Tree_val&GT;&GT;&GT;&gt;中 1 GT; _Kty =实体::面对,1&gt;
_Ty = std :: pair&gt;,1&gt; _Ty1 = const Entity :: Facing,1&gt; _Ty2 =标准::对&GT; 1 GT; ] 1&gt;和1> [1> _Mytree =标准:: _ Tree_val&GT;&GT;&GT;&GT; 1 GT; ] 1&gt;没有用户定义的转换运算符 可以执行此转换,或运营商不能 称为
我可以将枚举类用作多重映射中的键吗?
答案 0 :(得分:1)
multimap<Key, Value>::insert()
只接受一个参数,该参数应该可以转换为std::pair<const Key, Value>
。
为方便起见,可能还有一些加速(因为您不必创建临时pair
),您可以使用emplace()
代替:
listAnimation.emplace(Entity::Facing::Up, std::make_pair(Entity::Action::Splash, std::move(splashUp)));
答案 1 :(得分:0)
如果您检查docs for multimap::insert
,则可以看到没有任何方法的签名与您尝试执行的操作相匹配。方法是:
单个元素(1)
iterator insert (const value_type& val);
,提示符(2)iterator insert (iterator position, const value_type& val); range (3)
模板void insert(首先是InputIterator,最后是InputIterator);`
你试图在对象中插入一个值,即(1),但是编译器很困惑,因为函数arity使它看起来像后者2.
要插入值,您需要创建一对,即insert(make_pair(...))
。作为一种特殊情况,每个数据也会在您的情况下映射到一对,因此最终会成为insert(make_pair(..., make_pair(...)))
。
在任何情况下,没有insert
将密钥和映射作为两个参数,正如您尝试的那样。