C++ 连续数据和搜索

C++ 连续数据和搜索,c++,continuous,C++,Continuous,我想为我的游戏制作一种处理动画的新方法。目前,我分别在开关盒和嵌套开关盒中使用两个变量\u physical\u State&\u direction\u State来破坏对象动画状态。我想摆脱这种使用开关盒的方法 switch (_physics_State) { case OBJECT_PHYSICS_STATE_GROUNDED: switch(_direction_State) { case OBJECT_DIRECTIO

我想为我的游戏制作一种处理动画的新方法。目前,我分别在开关盒和嵌套开关盒中使用两个变量
\u physical\u State
&
\u direction\u State
来破坏对象动画状态。我想摆脱这种使用开关盒的方法

switch (_physics_State)
{
    case OBJECT_PHYSICS_STATE_GROUNDED: 
        switch(_direction_State)
        {
            case OBJECT_DIRECTION_UP: _animation_State = ANIMATION_STATE_YS_IDLE_UP; break;
            case OBJECT_DIRECTION_UP_RIGHT: _animation_State = ANIMATION_STATE_YS_IDLE_UP_RIGHT; break;
            case OBJECT_DIRECTION_UP_LEFT: _animation_State = ANIMATION_STATE_YS_IDLE_UP_LEFT; break;
            case OBJECT_DIRECTION_RIGHT: _animation_State = ANIMATION_STATE_YS_IDLE_RIGHT; break;
            case OBJECT_DIRECTION_RIGHT_DOWN: _animation_State = ANIMATION_STATE_YS_IDLE_RIGHT_DOWN; break;
            case OBJECT_DIRECTION_DOWN: _animation_State = ANIMATION_STATE_YS_IDLE_DOWN; break;
            case OBJECT_DIRECTION_DOWN_LEFT: _animation_State = ANIMATION_STATE_YS_IDLE_DOWN_LEFT; break;
            case OBJECT_DIRECTION_LEFT: _animation_State = ANIMATION_STATE_YS_IDLE_LEFT; break;     
            default: _animation_State = ANIMATION_STATE_YS_IDLE_DOWN; break;
        }
    break;
}
我提出了一种解决方案,通过按特定顺序读取变量并将其存储在哈希映射中来生成字符串。除最后一个变量
\u speed
外,这似乎有效<代码>\u速度是连续的,而不是离散的,可能会有一系列值,这些值仍会使对象达到相同的动画状态。我不能简单地将速度存储为一个简单的值。你们如何处理这些连续的数据,让我用离散的数据来搜索它

std::string animation_state_string_results = "" 
    + std::to_string(_physics_State) 
    + "-" + std::to_string(_direction_State);
    + "-" + std::to_string(G_button_Press_Value);
    + "-" + std::to_string(_speed);

将“连续”数量转换为粗略的“标签”非常容易。通常的想法是将范围划分为区间;然后使用二进制搜索的变体来识别包含查询值的间隔。存储已知不大于输入的最大值和已知大于输入的最小值的索引。请注意,可以考虑n值来分隔n + 1个区间(其中两个是半无限);如果这适合您的数据,则必须将一个或两个边界索引初始化为超出最外层值的索引

可以将其作为连续变量的预处理步骤,也可以存储(对于其他变量的每个适当组合)一个数据结构,该结构包含与每个间隔使用的值并行的间隔边界


同时,不要通过组合一个字符串来生成复合键,这样以后你会做一些愚蠢的事情,比如重新对它进行分类。相反,请使用
元组(或自定义类)。然后,您确实需要提供一个哈希函数,但这并不困难(存在使其变得微不足道的函数)。

与其使用
开关,不如只使用一个表(至少对于您发布的代码块)?我不确定我是否理解你所说的
\u speed
变量的意思,所以我没有答案。请阅读“我想摆脱这种使用开关大小写的方法。”“我想出了一个解决方案,通过按特定顺序读取变量并将其存储在哈希映射中来生成字符串。”这个问题是速度不是离散的。它就像一个整体。如果速度是4或11,动画状态对于这些数字之间的所有值都是相同的。我不明白。无法将连续数据作为离散数据进行搜索。但你似乎明白这一点。那你想要什么?如果速度真的是个问题的话,你可以继续使用
swtich case
,但我只会
std::map
并使用find。我没说我懂什么。我只是问是否有一种方法可以搜索连续数据。我要处理四个不同的变量。“速度”就是其中之一。我需要确认某个范围内的内容,而不是某个值。