通常,我需要根據(jù)非POD常量元素的值來選擇要執(zhí)行的操作,如下所示:switch( str ) { case "foo": ... case "bar": ... default: ...}遺憾的是switch只能與整數(shù)一起使用:error: switch quantity not an integer。那么,實現(xiàn)這種事情的最簡單的方法就是擁有ifs 序列:if( str == "foo" ) ...else if( str == "bar" ) ...else ...但是這種解決方案看起來很臟,應(yīng)該花費O(n),其中n是案例數(shù),而在最壞的情況下使用二進制搜索,那段代碼可能花費O(log n)。使用某些數(shù)據(jù)結(jié)構(gòu)(例如Maps),可以獲取表示字符串(O(log n))的整數(shù),然后使用O(1)switch,或者可以通過if在右側(cè)嵌套s 來實現(xiàn)靜態(tài)二進制排序方式,但是這些駭客仍然需要大量的編碼,這使一切變得更加復(fù)雜且難以維護。最好的方法是什么?(如switch聲明所述,快速,干凈,簡單)
3 回答

慕工程0101907
TA貢獻1887條經(jīng)驗 獲得超5個贊
您無需使用任何地圖或如下所示的unordered_map就可以實現(xiàn)它。僅比較第一個字符以識別哪個字符串。如果有多個匹配項,則可以回退到該case語句中的if / else鏈。如果沒有很多以相同字母開頭的字符串,則比較次數(shù)將大大減少。
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 關(guān)注
- 613 瀏覽
添加回答
舉報
0/150
提交
取消