gpt4 book ai didi

c++ - if-else VS map 查找

转载 作者:行者123 更新时间:2023-11-28 04:04:52 29 4
gpt4 key购买 nike

std::string v = GetV();
if(v == "AAA") {
func1();
} else if (v == "BBB" || v == "CCC" || v == "EEE") {
func2();
} else {
func3();
}

基本上我想像上面的代码一样做条件处理。由于将来可能有更多可能的 v 值,我认为 if-else 语句不够好。所以我将其替换为 map;

enum v_type {
v_type1,
v_type2,
v_type3,
v_type4
};

string v = GetV();
const static std::map < string, v_type > v_map({
"AAA",
v_type1
}, {
"BBB",
v_type2
}, {
"CCC",
v_type2
});
auto iter = v_map.find(v);
if (iter == v_map.end()) return;
switch
case (iter->second) {
case v_type1:
func1();
break;
case v_type2:
func2();
break;
}

我认为 map(Olog(N)) 甚至 unordered_map 会比 if-else 语句中的字符串比较更快,但权衡可能是映射本身对内存和 CPU 的影响。我对吗? map/unorder_map 的实现是否比 if-else 更好?

最佳答案

你可以试试 std::unordered_map<std::string, std::function<void()>> ,它将字符串映射到您的函数。这是一个例子:

#include <iostream>
#include <unordered_map>
#include <functional>

void func1() {std::cout << "Func1" << std::endl;}
void func2() {std::cout << "Func2" << std::endl;}
void func3() {std::cout << "Func3" << std::endl;}

int main()
{
std::unordered_map<std::string, std::function<void()>> myMap;

myMap["AAA"] = std::function<void()>(&func1);
myMap["BBB"] = std::function<void()>(&func2);
myMap["CCC"] = std::function<void()>(&func2);
myMap["EEE"] = std::function<void()>(&func2);

std::string v = GetV();

if (myMap.find(v) != myMap.end()) {
myMap.find(v)->second();
} else {
func3();
}

return 0;
}

你只需要定义哪个字符串对应哪个函数,然后就不需要使用switch/case了。 .

关于c++ - if-else VS map 查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58910494/

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