2014-10-20 42 views
0

我正在尋找最佳解決方案。我想存儲對象:鍵值在容器中。我需要通過按鍵對每個元素進行「良好」訪問,並且需要查找具有最低值的元素。查找具有最低值的元素的關聯容器

你會推薦什麼容器?有沒有比std :: map更好的解決方案(在STL或Boost中)? (訪問元素是確定,但尋找的最低值是O(n),我猜的)..

[編輯]

對不起,我錯過了增加一個非常重要的事情。其實我是想獲得最低的元素(最低值),並刪除它...

比方說,我的用法是:

1)訪問某些元素(按鍵)

2)訪問元素與最低值,將其取下

3)進入第一步,如果容器不爲空

我應該用什麼?你怎麼看?

+1

那麼你可以使用['std :: map'](http://en.cppreference.com/w/cpp/container/map)和一個自定義的比較函數,這樣它就按照值而不是按鍵。然後,「最低」條目將始終是'yourMap.begin()'。 – 2014-10-20 11:41:38

+2

@Joachim Pileborg:這怎麼可能,因爲'std :: map'需要一個二元謂詞,它以兩個元素鍵作爲參數? – TNA 2014-10-20 11:47:37

+0

@TNA那麼如果你有鑰匙,那麼你可以獲得數據。如果你有數據,你可以用它來做比較。 – 2014-10-20 11:53:59

回答

2

您可以使用第二個包含迭代器的容器(std::vectorstd::set)到您的元素,並根據需要對其進行分類。

+1

嗯...如何將std :: map和std :: priority_key與迭代器映射到std :: map中的元素? – peter55555 2014-10-20 12:10:27

+3

@ peter55555你的意思是'std :: priority_queue'?是的,如果你爲迭代器提供了一個二元謂詞,它應該可以工作。 – TNA 2014-10-20 12:24:23

+2

帶有'std :: priority_queue'的點是,你只能訪問「top」(在你的情況下是最低值)。如果那是你需要的那就完全好了。 – TNA 2014-10-20 12:26:25

相關問題