gpt4 book ai didi

std::multimap 中的 c++ 枚举类

转载 作者:行者123 更新时间:2023-11-30 05:41:16 25 4
gpt4 key购买 nike

我有 2 个 enum,它们属于较新的枚举类类型。

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;

关键是:facing and pair是实体的 Action +动画。

我是这样插入的:

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)));

这是一个错误,即使在谷歌搜索之后我也无法理解:

error C2664: 'std::_Tree_iterator<_Mytree> std::multimap<_Kty,_Ty>::insert(std::_Tree_const_iterator<_Mytree>,const std::pair<_Ty1,_Ty2> &)' : cannot convert parameter 1 from 'Entity::Facing' to 'std::_Tree_const_iterator<_Mytree>' 1>
with 1> [ 1>
_Mytree=std::_Tree_val>>>>, 1> _Kty=Entity::Facing, 1>
_Ty=std::pair>, 1> _Ty1=const Entity::Facing, 1> _Ty2=std::pair> 1> ] 1> and 1> [ 1>
_Mytree=std::_Tree_val>>>> 1> ] 1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

我可以在 multimap 中使用枚举类作为 Key 吗?

最佳答案

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)));

关于std::multimap 中的 c++ 枚举类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31204549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com