通常,我需要根据非POD常量元素的值来选择要执行的操作,如下所示:switch( str ) { case "foo": ... case "bar": ... default: ...}遗憾的是switch只能与整数一起使用:error: switch quantity not an integer。那么,实现这种事情的最简单的方法就是拥有ifs 序列:if( str == "foo" ) ...else if( str == "bar" ) ...else ...但是这种解决方案看起来很脏,应该花费O(n),其中n是案例数,而在最坏的情况下使用二进制搜索,那段代码可能花费O(log n)。使用某些数据结构(例如Maps),可以获取表示字符串(O(log n))的整数,然后使用O(1)switch,或者可以通过if在右侧嵌套s 来实现静态二进制排序方式,但是这些骇客仍然需要大量的编码,这使一切变得更加复杂且难以维护。最好的方法是什么?(如switch声明所述,快速,干净,简单)
3 回答
慕工程0101907
TA贡献1887条经验 获得超5个赞
您无需使用任何地图或如下所示的unordered_map就可以实现它。仅比较第一个字符以识别哪个字符串。如果有多个匹配项,则可以回退到该case语句中的if / else链。如果没有很多以相同字母开头的字符串,则比较次数将大大减少。
char *str = "foo";
switch(*str)
{
case 'f':
//do something for foo
cout<<"Foo";
break;
case 'b':
//do something for bar
break;
case 'c':
if(strcmp(str, "cat") == 0)
{
//do something for cat
}
else if(strcmp(str, "camel") == 0)
{
//do something for camel
}
}
即使它不是标准的,这看起来也是最佳的解决方案,无需花费任何费用。
- 3 回答
- 0 关注
- 583 浏览
添加回答
举报
0/150
提交
取消