gpt4 book ai didi

c++ - static const std::map vs if-elseif

转载 作者:IT老高 更新时间:2023-10-28 21:38:23 26 4
gpt4 key购买 nike

我编写了一个将字符串转换为数字的函数。我看到了两种可能的写法:

int convert(const std::string input) {
if (input == "one") {
return 1;
} else if (input == "two") {
return 2;
}
// etc.
return 0;
}

或者

int convert(const std::string input) {
static const map<string, int> table = {
{"one", 1},
{"two", 2}
// etc.
}

const auto result = table.find(input);

if (result == table.end())
{
return 0;
}

return result->second;
}

哪种方式更有效/可接受/可读?

最佳答案

答案很大程度上取决于您要支持多少不同的字符串。

几个字符串:使用 if-else。以后理解代码所需的工作量很小。

很多字符串:创建 map 。与阅读巨大的 if-else 结构相比,理解代码的工作量很小。可能,您将不得不经常扩展此列表。添加数据需要更少的输入。

我不确定 C++ 的 map 使用字符串作为键有多聪明。在最坏的情况下,两者具有相同的性能。如果列表变得非常大,您可能会考虑创建字符串的哈希值并将其用作键。这可能会大大提高性能。不过,您必须确保不会发生碰撞。 (一个好的散列算法和 64 位散列大小应该足够了。)现代 map 实现可能已经这样做了。

关于c++ - static const std::map<string, int> vs if-elseif,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37007856/

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