簡體   English   中英

是否執行本地排序的集合或優先級隊列?

[英]Implementation of a locally ordered set or priority queue?

我有一組代表數字的對象,我想根據自定義順序選擇這些數字。 此排序包括幾個條件,例如它們的表示類型(一些數字由一個間隔表示),它們的完整性以及最終的值。 這些數字在程序中共享(共享指針),對此我無能為力。

但是,elements屬性可以隨時更改,以便順序更改,而我無法將此通知容器。 例如,某些操作需要細化以間隔表示的數字,並且在此細化期間,可以找到確切的值。 因此,數字從間隔表示變為有理數,甚至可能是整數。 由於共享實例的原因,此更改會立即傳播到容器中的數字並中斷排序(我什至不知道更改了哪個數字)。 這完全破壞了std::set

因此,我想擁有一個試圖進行排序但不依賴於此的容器。 每當操作檢測到錯誤的排序時,都應在本地更正此排序。 例如, insert會插入元素(使用二進制搜索),並始終檢查當前元素的順序(是否破壞了鄰居)是否正確。

我願意接受“給我最小的元素”只是“給我一個小元素”,而findremove將具有線性復雜性:我只需要frontinsertremove_front才特別有效。

有沒有實現這樣的實現的東西? 您將如何實施?

如果要在標准庫中查找算法,則應查看以下內容:

std::make_heap
std::pop_heap
std::push_heap

<algorithm> 它們可能滿足您的需求,即使他們不滿足,我也可以肯定您會在某種堆結構中找到所需的內容。 哪一個可能取決於代碼的結構以及期望值更改的頻率等。

簡而言之:

堆是一種數據結構,可以在其中快速查找和提取最小(或最大)元素。 對於大多數堆來說,也可以在線性時間或更短的時間內創建重組結構。 如果要了解有關堆的更多信息,可以從Wikipedia上的此頁面開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM