[英]Why pair is required to insert into map?
雖然我不喜歡它,但發現聲明一pair<X,Y>
對象或調用make_pair
,以便調用map::insert
是make_pair
。 為什么insert
不使用兩個參數來分別指定Key和Value。
雖然我理解它是為了與其他STL容器兼容,但它展示了value_type
。 但是find
方法采用key_type
來破壞這種兼容性斷言。 map
既有key_type
又有mapped_type
,所以為什么cant map
有:
iterator insert(const key_type&, const mapped_type&);
是的, insert
迭代器有重載。 但是這個兩個參數insert
可能混合得很好。
我看到的一個優點是:減少了調用堆棧的使用。
編輯 :剛剛發現insert
是唯一采用value_type
方法,即pair<X,Y>
。 許多其他方法,如find
, erase
, at
, count
, equal_range
, lower_bound
, upper_bound
和operator[]
采用key_type
。
所有標准庫容器都定義了一個value_type
成員類型,它們的接口通常按照value_type
: insert
, push_back
, push_front
。 新的接口emplace
添加了一種構造value_type
對象的方法,就像通過:
value_type(std::forward<Args>(args)...)
基本上,沒有為衛星數據關聯容器(即地圖)提供特殊的接口,這些容器知道value_type
的特殊結構(已定義,不是完全眾所周知的,是pair<const key_type, mapped_type>
),除了find
和erase
以及key_type
參數的operator[]
key_type
。
這也許是標准的監督,或許它從未被認為是一個問題,因為你可以隨時使用make_pair
, make_tuple
或forward_as_tuple
,或emplace
,創建映射值的類型。
( insert
和僅移動映射類型存在一個問題,它已浮出水面並且是最近提案的主題。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.