【C++代码优化之switch case语句】

C++代码优化

提示:当C++中的switch case语句分支较多时,我们可以考虑使用更高效的数据结构来代替switch case语句。



前言


提示:使用查找表方式替换switch case语句

一、替换方案

一种可行的方案是使用std::map或std::unordered_map来实现这个逻辑。具体地,我们可以将每个case对应的常量值作为key,将对应常量值所需要执行的代码逻辑作为value存储到map中,然后根据传入的参数(即switch语句所判断的变量)在map中查找对应的value并执行。

这种方式相比switch case语句有以下优点:

1.增加、删除或修改分支的代码逻辑更加方便,只需要在map中增删改对应的值即可,而不需要修改switch语句,从而更加灵活和可维护。
2.运行时查找分支的过程更加高效,根据map的实现方式,查找时间复杂度可以做到O(log n)或O(1),而switch case语句在分支数量上升时需要进行线性查找,时间复杂度为O(n)。

二、方法示例

1.首先,包含必要的头文件:

代码如下(示例):

#include <iostream>
#include <functional>
#include <map>

2.定义不同操作的处理函数:

代码如下(示例):

void operation1() {
    std::cout << "执行操作1" << std::endl;
}

void operation2() {
    std::cout << "执行操作2" << std::endl;
}

void operation3() {
    std::cout << "执行操作3" << std::endl;
}

3.创建一个映射表,将数字作为键,对应的处理函数作为值:

代码如下(示例):

std::map<int, std::function<void()>> operationMap = {
    {1, operation1},
    {2, operation2},
    {3, operation3}
};

4.在主函数中,根据用户输入的数字查找并执行对应的操作:

代码如下(示例):

int main() {
    int userInput;
    std::cout << "请输入一个数字(1-3): ";
    std::cin >> userInput;
    
    // 在映射表中查找对应的处理函数
    auto it = operationMap.find(userInput);
    if (it != operationMap.end()) {
        // 执行对应的操作
        it->second();
    } else {
        std::cout << "无效的输入" << std::endl;
    }
    
    return 0;
}

总结

提示:打完收工:

这样,我们就使用std::map替代了switch语句来根据用户输入的数字执行相应的操作。通过添加新的键值对到映射表中,我们可以方便地扩展和修改操作。

希望这个例子能够帮助你理解如何使用std::map替代switch语句来实现类似的逻辑。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值