簡體   English   中英

std :: map ::在C ++中插入更改17

[英]std::map::insert change in C++17

我看到std::mapstd::unordered_mapinsert方法將改變

template<class P> std::pair<iterator,bool> insert(P&& value); (C++11)

std::pair<iterator,bool> insert(value_type&& value);  (C++17)

但是,對於這些容器, value_typestd::pair<A const, int> 這里有兩個問題:

  1. 為何如此改變? 有什么好處?
  2. 如何在插入時移動密鑰? C ++ 11版本接受任何東西( P上的約束是default_constructible<value_type, P&&> ),然后是std::pair<A, int> - 這是大多數時候這個參數的類型,因為它是返回的by std::make_pair - 並且可以調用A的移動構造函數。 但是在C ++ 17版本中,這個參數被轉換為value_type ,其中A是const,然后是不可移動的。 如果我沒有忽略某些東西,則必須復制。 或者C ++ 17也改變了這方面的任何東西?

謝謝!

附加的非模板過載到insert在C ++ 17中的溶液。

這樣的重載具有以下優點:它允許.insert( { {key}, {value, args} } )基於語法 - {}的構造。 template參數不能傳遞{}基礎建設的指示沒有明確的類型。

暫無
暫無

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

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