我想制作一個包含很少元素的容器,我將只檢查一個元素是否屬于該集合的一部分。我知道如果集合足夠大,向量就不是合適的容器,因為每個研究都是最壞的 O(n) 情況,并且有使用哈希函式或二叉樹的更好選擇。但是我想知道如果我的集合只有很少的元素(例如只有 5 個)并且我事先知道會發生什么,將容器實作為具有哈希函式的結構是否值得?也許如果集合不夠大,必須應用哈希函式引入的開銷大于必須迭代 5 個元素。
例如在 C 中使用 std::unordered_set 而不是 std::vector。一如既往,謝謝
uj5u.com熱心網友回復:
影響std::vector落后于其他方法的點的因素有很多。看到std::vector 比 std::unordered_set 更快嗎?和向量排序/唯一/擦除的性能與復制到 unordered_set的某些原因。因此,對這一點的任何計算都必須相當復雜。找到這一點的最方便的方法是性能測驗。
請記住,某些因素取決于所使用的硬體。因此,您不僅需要在開發機器上進行性能測驗,還需要在“典型”最終用戶機器上進行性能測驗。但是,您的開發機器可以給您一個直覺檢查(就像Quick Bench 之類的在線工具一樣),讓您知道您甚至還沒有進入球場。(個別程式員的直覺是出了名的不可靠。有些人認為 100 是一個很大的數字并擔心性能;其他人直到數字達到數十億才擔心。這些人中的任何一個都會被其他人的觀點所震撼。)
鑒于很難確定std::vector落后的點,我認為這是提醒過早優化通常是浪費時間的好地方。出于好奇而調查此性能是可以的,但在將其確定為性能瓶頸之前,不要為此拖延專案更重要方面的作業。選擇最適合您的代碼的方法。
話雖如此,我個人認為斷點很好,超過 10 個專案。因此,對于問題的 5 元素集合,我傾向于使用向量而不是回頭看。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/317126.html
標籤:C
上一篇:在QML插槽中未收到C 信號
