簡體   English   中英

是否保證std :: map中的元素是有序的?

[英]Are the elements in a std::map guaranteed to be ordered?

這只是一個實現副作用(紅黑樹)還是c ++標准保證了順序?

有序迭代不是實現細節; 它受C ++標准的保證。 它是所有關聯容器的基本屬性(C ++03§23.1.2/ 9):

關聯容器的迭代器的基本屬性是它們以密鑰的非降序順序遍歷容器,其中非降序由用於構造它們的比較定義。 對於任何兩個可解除引用的迭代器ij ,使得從ij距離為正,

  value_comp(*j, *i) == false 

value_comp是用於構造映射的比較器(默認情況下,它是std::less<T> )。

§23.1.2/ 2:

每個關聯容器都在Key上進行參數化和一個排序關系Compare ,它對Key元素產生嚴格的弱排序(25.3)。 ... Compare類型的對象稱為容器的比較對象。 該比較對象可以是指向函數的指針或具有適當函數調用操作符的類型的對象。

默認的Compare對象是小於函數std::less<Key>

排序是函數的屬性。 這是一項要求,而非副作用。

對象進行排序是一種副作用。 23.1.2 / 10和23.1.2 / 9(James引用)保證map / set和multimap / multiset分別在從beginend的序列中有增加/減少的鍵。

它受c ++標准的保證。

保證。 如果你想要一些不受此限制的東西,請嘗試使用boost :: unordered_map <>

暫無
暫無

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

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