當我們的程式中需要使用優先順序佇列時,常常考慮到兩種資料結構,set和priority_queue,然後不知道用哪乙個好。先分析一下我們的需求:
1.是否需要隨時從容器中刪除某項,比如乙個待釋放的資源佇列,有時我們需要放棄釋放,就要從待釋放資源佇列中刪除。
2.是否需要維持佇列並依次處理,還是說佇列僅僅是為了一次性的排序。也就是是否需要遍歷容器中的元素。
第一點,priority_queue是不提供刪除任意一項的,它提供的方法非常有限,只有push,pop,top等幾個,而set有erase方法。
第二點,可憐的priority_queue竟然沒有提供iterator,想要遍歷的唯一方法就是不斷的top和pop直到容器為空。從效能上考慮,priority_queue遍歷時必須刪除,導致了額外的刪除開銷,而乙個iterator迭代器卻不需要對容器結構做任何修改,效能上更勝一籌。
那麼,priority_queue到底有什麼好處呢?答案是安全,僅提供了有限的push,pop,top幾個函式,想要破壞內部結構都不行,呵呵,不過高手建議還是用set吧。
Emule與bt協議小議
emule與bt 協議小議 很久以前就一直想寫個東西來總結一下我對 p2p,可一直不能靜下心來 不知道是不是由於沒喝靜心口服液的原因 最近終於成文 拿出來與大家共享 並歡迎拍磚 共同進步 閒話少話 轉入正題 簡單的說 emule 與bt 協議兩者各有千秋 下面就兩種協議的異同及效能作一比較.1.傳統...
Emule與bt協議小議
簡單的說,emule與bt 協議兩者各有千秋,下面就兩種協議的異同及效能作一比較.1.傳統連線方式 2.底層傳輸協議比較 emule使用tcp和udp兩種協議進行通訊,更加有效的利用了網路資源,功能完整強大,但這也同時使主機的負荷加大,程式編寫難度提高 3.檔案組織方式和資料驗證方式 4.流量控制方...
小議C 裡 set和map關聯容器的用法
在set中每個元素的值都唯一,而且系統能根據元素的值自動進行排序。set中元素的值不能直接被改變。set內部採用的是一種非常高效的平衡檢索二叉樹 紅黑樹,也稱為rb樹 red black tree rb樹的統計效能要好於一般平衡二叉樹。count 用來查詢set中某個某個鍵值出現的次數 這個函式在s...