【发布时间】:2019-12-04 13:59:03
【问题描述】:
我的方法采用两个参数,一个为string,另一个为int。
字符串必须与超过 50 个字符串 进行比较,一旦找到匹配,int 值需要用硬编码字符串映射,如下例所示
前:
string Compare_Method(std::string str, int val) {
if(str == "FIRST")
{
std::array<std::string, 3> real_value = {"Hello1","hai1","bye1"}
return real_value[val];
}
else if(str == "SECOND")
{
std::array<std::string, 4> real_value = {"Hello2","hai2","bye2"}
return real_value[val];
}
else if(str == "THIRD")
{
std::array<std::string, 5> real_value = {"Hello3","hai3","bye3"}
return real_value[val];
}
//----- 50+ else if
}
我的方法如上。什么是有效的方法
1.比较50多个字符串。
2。为每个 if 情况创建 std::array
已编辑:std::array 大小不固定,可以是 3、4、5,如上编辑。
【问题讨论】:
-
将您的字符串和字符串数组存储在
unordered_map中。这将更有效率。您还可以形成由字符串和值组成的复合键,并使用该键来索引地图。 -
sn-p 中显示的字符串是示例还是实际预期值?
-
@rim 在您的所有
else if中,您还使real_value的数组更大,但您不会向数组中添加更多字符串。以防万一你不知道:) -
只是一个想法:也许可以考虑使用SMID 的方法。不确定这在 C++ 中的实际效果如何,对于字符串操作,它也可能看起来很丑。