细心地使用 emplace 允许在构造新元素的同时避免不必要的复制或移动操作。准确地以与提供给 emplace 者相同的参数,通过 std::forward<Args>(args)... 转发调用新元素(即 std::pair<const Key, T> )的构造函数。即使容器中已有拥有该关键的元素,也可能构造元素,该情况下新构造的元素将被立即销毁。 若因插入发...
std::unordered_map::emplace_hint template <class... Args> iterator emplace_hint( const_iterator hint, Args&&... args ); (since C++11) 将新元素插入容器,使用hint作为元素应该去哪里的建议。元素是就地构造的,即不执行复制或移动操作。 元素类型%28的构造函数value_type就是,std::pair<const Key...
insert、emplace、emplace_hint、operator[]仅若重哈希导致 erase仅为指向被擦除元素者 注意 swap 函数不非法化容器内的任何迭代器,但它们非法化标记交换区域结尾的迭代器。 指向存储于容器中的关键或元素的引用和指针仅因擦除该元素才被非法化,即使在非法化对应迭代器时。
不同于 insert 或emplace ,若不发生插入,则这些函数不从右值参数移动,这令操纵 value 为仅移动类型的 map ,如 std::unordered_map<std::string, std::unique_ptr<foo>> 更为容易。另外, try_emplace 分离地处理关键和到 mapped_type 的参数,不同于要求参数构造 value_type (即一个 std::pair )的 emplac...
谨慎使用emplace允许构造新元素,同时避免不必要的复制或移动操作。新元素%28i.e的构造函数。std::pair<const Key, T>%29的调用参数与提供给emplace,通过std::forward<Args>(args)...即使容器中已经有一个带有密钥的元素,也可以构造该元素,在这种情况下,新构造的元素将立即被销毁。
std::pair<iterator,bool>emplace(Args&&...args); (since C++11) Inserts a new element into the container constructed in-place with the givenargs, if there is no element with the key in the container. The constructor of the new element (i.e.std::pair<constKey, T>) is called with exac...
insert、emplace、emplace_hint、operator[]仅若重哈希导致 erase仅为指向被擦除元素者 注意 swap 函数不非法化容器内的任何迭代器,但它们非法化标记交换区域结尾的迭代器。 指向存储于容器中的关键或元素的引用和指针仅因擦除该元素才被非法化,即使在非法化对应迭代器时。
emplace_hintConstruct and insert element with hint (public member function ) insertInsert elements (public member function ) eraseErase elements (public member function ) clearClear content (public member function ) swapSwap content (public member function) ...
All insert , emplace and operator[] can perform an additional construction of value_type in different situations: insert and emplace 在插入发生之前执行此操作,并且 operator[] 默认在 key 不存在时构造映射值。因此,它们不适合构建/复制/移动成本高昂的类型( std::thread ,非常大的 std::array…)。在...