vector<int>(128,0) 代替 unordered_map<char, int>靠譜嗎?
在leetcode刷題時候,看見有答案使用vector&
map(128,0) 代替 unordered_map& map的功能, 這種做法我應該學習嗎? 並不了解哈希函數的具體實現,vector&
實際運行會快一點。。。但是這個技巧值得學習嗎? 看起來很不安全。。。。
當然可以。反正這是C++,安全性語言永遠不管的,都看你。
我在正則表達式的實現裡面,就是四層16叉樹來做字元串的map的,跟這個原理上一致。
這是很正常的操作啊,空間換時間,map變查表。
不過128的確稍有問題,我的話還是會開256的大小(反正用不上的不會拖累速度,這麼小都在L1里)。但恕我直言,128/256個key,實在沒什麼必要用hashmap吧……又不是multimap。
而且顯然也沒必要用vector,用array才夠C++11啊……
如果這裡的char是指代一個字元的話,我覺得也就在刷題的時候這麼寫寫了,現實中難免要考慮unicode……
是安全的,可列印字元一般都在0 ~ 127的範圍內,所以用vector&
int a[128]豈不是更好。
leetcode刷題是為了找工作,但面試現場寫白板的時候考官是不會細究這些東西的,而且面試會有討論過程,考官如果在意你可以直接陳述選unordered_map好還是vector比較好。
可能你用unordered_map別人還覺得你不用magic number,容錯率高,代碼風格比較好呢。反過來說你現場用std::vector&
不過題主最好去了解下std::hash對char/int/string的實現,還有unordered_map內存組織的方法。比你糾結vector還是map要有效的多。
這些都是刷題產生的技巧,刷題當然沒問題。現實中我是很少遇到這樣的場景。
template &
(霧 這樣名字就好聽了
很安全,沒毛病,工程里這麼用也不會有什麼穩定性相關的問題,就是得寫好注釋給別人看明白。直接拿值當成下邊來用也是哈希呀(捂臉)。
技巧學一下可以但是不要濫用。比如說一些對內存需求高的場合,或者是鍵名太長就不要這麼幹了,比如說兩個char的時候。。。
刷題當然可以了,又寫不出什麼安全性問題,這樣的投機方法說不定面試還能吹一波constant space complexity
推薦閱讀:
TAG:CC | LeetCode領扣 |