簡體   English   中英

為什么需要將對插入地圖?

[英]Why pair is required to insert into map?

雖然我不喜歡它,但發現聲明一pair<X,Y>對象或調用make_pair ,以便調用map::insertmake_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> 許多其他方法,如finderaseatcountequal_rangelower_boundupper_boundoperator[]采用key_type

所有標准庫容器都定義了一個value_type成員類型,它們的接口通常按照value_typeinsertpush_backpush_front 新的接口emplace添加了一種構造value_type對象的方法,就像通過:

value_type(std::forward<Args>(args)...)

基本上,沒有為衛星數據關聯容器(即地圖)提供特殊的接口,這些容器知道value_type的特殊結構(已定義,不是完全眾所周知的,是pair<const key_type, mapped_type> ),除了finderase以及key_type參數的operator[] key_type

這也許是標准的監督,或許它從未被認為是一個問題,因為你可以隨時使用make_pairmake_tupleforward_as_tuple ,或emplace ,創建映射值的類型。

insert和僅移動映射類型存在一個問題,它已浮出水面並且是最近提案的主題。)

暫無
暫無

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

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