Home C&C++函数库 c++ 语法 程序源码 Linux C库

std::

unordered_multimap::unordered_multimap

公众成员函数  <unordered_map>

C++11; empty (1)
explicit unordered_multimap ( size_type n = /* see below */,
                              const hasher& hf = hasher(),
                              const key_equal& eql = key_equal(),
                              const allocator_type& alloc = allocator_type() );
explicit unordered_multimap ( const allocator_typeamp;& alloc );
range (2)
template <class InputIterator>
         unordered_multimap ( InputIterator first, InputIterator last,
                              size_type n = /* see below */,
                              const hasher& hf = hasher(),
                              const key_equal& eql = key_equal(),
                              const allocator_type& alloc = allocator_type() );
copy (3)
unordered_multimap ( const unordered_multimap& ump );
unordered_multimap ( const unordered_multimap& ump, const allocator_type& alloc );
move (4)
unordered_multimap ( unordered_multimap&& ump );
unordered_multimap ( unordered_multimap&& ump, const allocator_type& alloc );
initializer list (5)
unordered_multimap ( initializer_list<value_type> il,
                     size_type n = /* see below */,
                     const hasher& hf = hasher(),
                     const key_equal& eql = key_equal(),
                     const allocator_type& alloc = allocator_type() );

构建unordered_multimap

构造一个unordered_multimap容器对象,根据使用的构造函数版本初始化其内容:
(1)空容器构造函数(默认构造函数)
构造一个空的unordered_multimap对象,不包含任何元素,大小为0。 它可以使用特定的 hasher、key_equalallocator对象构造容器,以及最少数量的哈希桶。

(2)范围构造函数
构造一个unordered_multimap对象,包含[first,last)范围内每个元素的副本。

(3)复制构造函数(和使用分配器复制)
该对象被初始化为具有与ump unordered_multimap对象相同的内容和属性。

(4)移动构造函数(和使用分配器移动)
这个对象获取右值ump容器的内容。

(5)初始化列表构造函数
用列表的内容初始化容器。

☲  参数


n
最小初始桶数。
这不是容器中元素的数量,而是内部哈希表在构造时所需的最小槽数。
如果没有指定此参数,构造函数将自动确定(依赖于特定库实现的方式)。
size_type是一种无符号整型。

hf
哈希函数对象。哈希是一个基于传递给它作为参数的容器对象键返回整型值的函数。
成员类型 hasherunordered_multimap中定义为其第三个模板形参(Hash)的别名。

eql
比较函数对象,如果作为参数传递的两个容器对象键被认为相等,则返回true
成员类型key_equalunordered_multimap中定义为它的第四个模板形参(Pred)的别名。

alloc
要使用的Allocator对象,而不是构造一个新对象。
对于使用默认allocator类模板版本的类实例化,此参数不相关。
成员类型allocator_typeunordered_multimap中定义为它的第五个模板参数(Alloc)的别名。

first, last
指向范围内初始和最终位置的输入迭代器。
使用的范围是[first,last),它包括firstlast之间的所有元素, 包括first所指向的元素,但不包括last所指向的元素。
函数模板类型可以是任何类型的输入迭代器。

ump
同一类型的另一个unordered_multimap对象(具有相同的类模板参数),其内容要么被复制,要么被移动。

il
一个initializer_list对象。
这些对象是由初始化列表声明符自动构造的。
成员类型value_type是容器中元素的类型,在 unordered_multimap 中定义为 pair<const key_type,mapped_type>,其中成员类型key_type是第一个模板参数 (Key类型)的别名,而mapped_type是第二个模板参数(映射类型,T)的别名。

☣  示例



// constructing unordered_multimaps
#include <iostream>
#include <string>
#include <unordered_map>

typedef std::unordered_multimap<std::string,std::string> stringmap;

stringmap merge (stringmap a,stringmap b) {
  stringmap temp(a); temp.insert(b.begin(),b.end()); return temp;
}

int main ()
{
  stringmap first;                              // empty
  stringmap second ( {{"apple","red"},{"lemon","yellow"}} );       // init list
  stringmap third ( {{"apple","green"},{"strawberry","red"}} );  // init list
  stringmap fourth (second);                    // copy
  stringmap fifth (merge(third,fourth));        // move
  stringmap sixth (fifth.begin(),fifth.end());  // range

  std::cout << "sixth contains:";
  for (auto& x: sixth) std::cout << " " << x.first << ":" << x.second;
  std::cout << std::endl;

  return 0;
}

可能输出:
sixth contains: apple:green apple:red lemon:yellow strawberry:red

✥ 复杂度



对于empty(1)和move(4)构造函数:常量时间。
对于range(2)、copy(3)和初始化列表(5)的构造函数:平均情况线性,最坏情况二次方。

🍄  另请参阅



unordered_multimap::operator= 内容赋值 (公众成员函数)
unordered_multimap::reserve 重组存储桶 (公众成员函数)
unordered_multimap::insert 插入元素 (公众成员函数)

联系我们 免责声明 关于CandCplus 网站地图