SGI

hash_multimap<Key, Data, HashFcn, EqualKey, Alloc>

类别: 容器 组件类型: 类型

描述

Hash_multimap是一个 哈希关联容器,它将类型为Key的对象与类型为Data. Hash_multimap的对象关联。它是一个 成对关联容器,这意味着它的值类型为pair<const Key, Data>. 它也是一个 多重关联容器,这意味着对于使用EqualKey.

比较相等的键,元素数量没有限制。通过键查找hash_multimap通过键查找中的元素效率很高,所以它对于元素顺序无关紧要的“字典”很有用。然而,如果元素需要按特定顺序排列,那么multimap更合适。

示例

struct eqstr
{
  bool operator()(const char* s1, const char* s2) const
  {
    return strcmp(s1, s2) == 0;
  }
};

typedef hash_multimap<const char*, int, hash<const char*>, eqstr> map_type;

void lookup(const map_type& Map, const char* str)
{
  cout << str << ": ";
  pair<map_type::const_iterator, map_type::const_iterator> p =
    Map.equal_range(str);
  for (map_type::const_iterator i = p.first; i != p.second; ++i)
    cout << (*i).second << " ";
  cout << endl;
}

int main()
{
  map_type M;
  M.insert(map_type::value_type("H", 1));
  M.insert(map_type::value_type("H", 2));
  M.insert(map_type::value_type("C", 12));
  M.insert(map_type::value_type("C", 13));
  M.insert(map_type::value_type("O", 16));
  M.insert(map_type::value_type("O", 17));
  M.insert(map_type::value_type("O", 18));
  M.insert(map_type::value_type("I", 127));

  lookup(M, "I");
  lookup(M, "O");
  lookup(M, "Rn");
}

定义

定义在头文件 hash_map 中,以及向后兼容的头文件 hash_map.h 中。这个类是 SGI 的扩展;它不是 C++ 标准的一部分。

模板参数

参数 描述 默认值
Key hash_multimap 的键类型。它也被定义为hash_multimap::key_type.  
Data hash_multimap 的数据类型。它也被定义为hash_multimap::data_type.  
HashFcn hash_multimap 使用的 哈希函数。它也被定义为hash_multimap::hasher. hash<Key>
EqualKey hash_multimap 的键等价函数:一个 二元谓词,用于确定两个键是否相等。它也被定义为hash_multimap::key_equal. equal_to<Key>
Alloc thehash_set的分配器,用于所有内部内存管理。 alloc

模型

多重哈希关联容器, 成对关联容器

类型要求

公共基类

无。

成员

成员 定义位置 描述
key_type 关联容器 the通过键查找的键类型,Key.
data_type 成对关联容器 与键关联的对象类型。
value_type 成对关联容器 对象类型,pair<const key_type, data_type>,存储在 hash_multimap 中。
hasher 哈希关联容器 the通过键查找哈希函数.
key_equal 哈希关联容器 函数对象,用于比较键是否相等。
pointer 容器 指向T.
reference 容器 指向T
const_reference 容器 常量引用指向T
size_type 容器 一个无符号整数类型。
difference_type 容器 一个有符号整数类型。
iterator 容器 用于遍历通过键查找. [1]
const_iterator 容器 常量迭代器,用于遍历通过键查找.
iterator begin() 容器 返回一个iterator指向通过键查找.
iterator end() 容器 返回一个iterator指向通过键查找.
const_iterator begin() const 容器 返回一个const_iterator指向通过键查找.
const_iterator end() const 容器 返回一个const_iterator指向通过键查找.
size_type size() const 容器 返回通过键查找.
size_type max_size() const 容器 返回通过键查找.
bool empty() const 容器 true如果通过键查找的大小为0.
size_type bucket_count() const 哈希关联容器 返回通过键查找.
void resize(size_type n) 哈希关联容器 将桶数量增加到至少n.
hasher hash_funct() const 哈希关联容器 返回hasher对象,它由通过键查找.
key_equal key_eq() const 哈希关联容器 返回key_equal对象,它由通过键查找.
hash_multimap() 容器 创建一个空的通过键查找.
hash_multimap(size_type n) 哈希关联容器 创建一个空的通过键查找至少有n个桶。
hash_multimap(size_type n, 
              const hasher& h)
哈希关联容器 创建一个空的通过键查找至少有n个桶,使用h作为哈希函数。
hash_multimap(size_type n, 
              const hasher& h, 
              const key_equal& k)
哈希关联容器 创建一个空的通过键查找至少有n个桶,使用h作为哈希函数,以及k作为键等价函数。
template <class InputIterator>
hash_multimap(InputIterator, InputIterator)
[2]
多重哈希关联容器 创建一个带有范围副本的 hash_multimap。
template <class InputIterator>
hash_multimap(InputIterator, InputIterator,
              size_type n)
[2]
多重哈希关联容器 创建一个带有范围副本的 hash_multimap,并且桶数量至少为n.
template <class InputIterator>
hash_multimap(InputIterator, InputIterator,
              size_type n, const hasher& h)
[2]
多重哈希关联容器 创建一个带有范围副本的 hash_multimap,并且桶数量至少为n,使用h作为哈希函数。
template <class InputIterator>
hash_multimap(InputIterator, InputIterator,
              size_type n, const hasher& h, 
              const key_equal& k)
[2]
多重哈希关联容器 创建一个带有范围副本的 hash_multimap,并且桶数量至少为n,使用h作为哈希函数,以及k作为键等价函数。
hash_multimap(const hash_multimap&) 容器 复制构造函数。
hash_multimap& operator=(const hash_multimap&) 容器 赋值运算符
void swap(hash_multimap&) 容器 交换两个 hash_multimap 的内容。
iterator insert(const value_type& x) 多重关联容器 插入x通过键查找.
template <class InputIterator>
void insert(InputIterator, InputIterator)
[2]
多重关联容器 将一个范围插入到通过键查找.
void erase(iterator pos) 关联容器 删除由pos.
size_type erase(const key_type& k) 关联容器 删除键为k.
void erase(iterator first, iterator last) 关联容器 删除一个范围内的所有元素。
void clear() 关联容器 删除所有元素。
const_iterator find(const key_type& k) const 关联容器 查找键为k.
iterator find(const key_type& k) 关联容器 查找键为k.
size_type count(const key_type& k) const 关联容器 统计键为k.
pair<const_iterator, const_iterator> 
equal_range(const key_type& k) const
关联容器 查找一个范围,包含所有键为k.
pair<iterator, iterator> 
equal_range(const key_type& k)
关联容器 查找一个范围,包含所有键为k.
bool operator==(const hash_multimap&, 
                const hash_multimap&)
哈希关联容器 测试两个 hash_multimap 是否相等。这是一个全局函数,而不是成员函数。

新成员

所有通过键查找的成员都定义在 多重哈希关联容器成对关联容器 要求中。Hash_multimap没有引入任何新成员。

备注

[1] Hash_multimap::iterator不是一个可变迭代器,因为hash_multimap::value_type不是 可赋值的。也就是说,如果i的类型为hash_multimap::iterator,以及p的类型为hash_multimap::value_type,那么*i = p不是一个有效的表达式。然而,hash_multimap::iterator也不是一个常量迭代器,因为它可以用来修改它指向的对象。使用上述相同的符号,(*i).second = p是一个有效的表达式。

[2] 这个成员函数依赖于成员模板函数,目前(1998 年初)并非所有编译器都支持。如果你的编译器支持成员模板,你可以使用任何类型的 输入迭代器 调用此函数。但是,如果你的编译器还不支持成员模板,那么参数必须是const value_type*类型,或者hash_multimap::const_iterator.

类型。

另见关联容器, 哈希关联容器, 成对关联容器, 多重哈希关联容器,, set, map, multimap, hash_set, multiset, hash_map
[Silicon Surf] [STL Home]
hash_multiset 版权 © 1999 Silicon Graphics, Inc. 保留所有权利。