SGI

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

类别:容器 (containers) 组件类型:类型 (type)

描述

哈希映射 (Hash_map)是一个 哈希关联容器,它将类型为Key的对象与类型为Data. 哈希映射 (Hash_map)的对象关联起来。它是一个 配对关联容器,这意味着它的值类型为pair<const Key, Data>。它也是一个 唯一关联容器,这意味着没有两个元素的键使用EqualKey.

进行比较时相等。通过键在hash_map通过键在中查找元素非常高效,因此对于“字典”(其中元素的顺序无关紧要)很有用。但是,如果元素必须按特定顺序排列,则

map

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

int main()
{
  hash_map<const char*, int, hash<const char*>, eqstr> months;
  
  months["january"] = 31;
  months["february"] = 28;
  months["march"] = 31;
  months["april"] = 30;
  months["may"] = 31;
  months["june"] = 30;
  months["july"] = 31;
  months["august"] = 31;
  months["september"] = 30;
  months["october"] = 31;
  months["november"] = 30;
  months["december"] = 31;
  
  cout << "september -> " << months["september"] << endl;
  cout << "april     -> " << months["april"] << endl;
  cout << "june      -> " << months["june"] << endl;
  cout << "november  -> " << months["november"] << endl;
}

更合适。

示例

定义

在头文件 hash_map 和向后兼容头文件 hash_map.h 中定义。此类是 SGI 扩展;它不是 C++ 标准的一部分。 描述 模板参数
Key 参数默认值.  
Data hash_map 的键类型。这也定义为hash_map::key_type.  
hash_map 的数据类型。这也定义为 hash_map::data_typeHashFcn. hash_map 使用的 哈希函数。这也定义为
EqualKey hash_map::hasherhash<Key>. hash_map 键相等函数:一个 二元谓词,用于确定两个键是否相等。这也定义为
hash_map::key_equal equal_to<Key>通过键在Alloc 的分配器,用于所有内部内存管理。

alloc

模型

唯一哈希关联容器配对关联容器

分配器

公共基类

无。

成员 成员 描述
定义位置 key_type equal_to<Key>通过键在关联容器 (Associative Container)Key.
的键类型, data_type 配对关联容器 (Pair Associative Container)
与键关联的对象的类型。 data_type value_type对象类型,pair<const key_type, data_type>
,存储在 hash_map 中。 hasher equal_to<Key>通过键在哈希关联容器 (Hashed Associative Container)
哈希函数 hasher key_equal
函数对象,用于比较键是否相等。 pointer 容器 (Container)指向.
T pointer reference指向
指向 pointer const_reference指向
常量引用指向 pointer size_type
无符号整数类型。 pointer difference_type
有符号整数类型。 pointer iterator通过键在. [1]
用于遍历 pointer const_iterator通过键在.
常量迭代器,用于遍历 pointer iterator begin()有符号整数类型。返回一个通过键在.
指向的开头。 pointer iterator begin()有符号整数类型。iterator end()通过键在.
指向的结尾。 pointer iterator begin()用于遍历返回一个通过键在.
const_iterator begin() const pointer iterator begin()用于遍历iterator end()通过键在.
const_iterator end() const pointer size_type size() const通过键在.
返回的大小。 pointer size_type max_size() const通过键在.
返回的最大可能大小。 pointer bool empty() const如果的大小为通过键在true0.
size_type bucket_count() const hasher 返回使用的存储桶数量。通过键在.
void resize(size_type n) hasher 将存储桶数量增加到至少n.
hasher hash_funct() const hasher 返回,存储在 hash_map 中。对象,该对象由通过键在.
key_equal key_eq() const hasher 返回哈希函数对象,该对象由通过键在.
hash_map() pointer 创建一个空的通过键在.
hash_map(size_type n) hasher 创建一个空的通过键在至少有n个存储桶。
hash_map(size_type n, 
         const hasher& h)
hasher 创建一个空的通过键在至少有n个存储桶,使用h作为哈希函数。
hash_map(size_type n,
         const hasher& h, 
         const key_equal& k)
hasher 创建一个空的通过键在至少有n个存储桶,使用h作为哈希函数和k作为键相等函数。
template <class InputIterator>
hash_map(InputIterator f, InputIterator l)
[2]
唯一哈希关联容器 (Unique Hashed Associative Container) 创建一个包含范围副本的 hash_map。
template <class InputIterator>
hash_map(InputIterator f, InputIterator l,
         size_type n)
[2]
唯一哈希关联容器 (Unique Hashed Associative Container) 创建一个包含范围副本的 hash_map,并且存储桶数量至少为n.
template <class InputIterator>
hash_map(InputIterator f, InputIterator l,
         size_type n, const hasher& h)
[2]
唯一哈希关联容器 (Unique Hashed Associative Container) 创建一个包含范围副本的 hash_map,并且存储桶数量至少为n,使用h作为哈希函数。
template <class InputIterator>
hash_map(InputIterator f, InputIterator l,
         size_type n, const hasher& h, 
         const key_equal& k)
[2]
唯一哈希关联容器 (Unique Hashed Associative Container) 创建一个包含范围副本的 hash_map,并且存储桶数量至少为n,使用h作为哈希函数和k作为键相等函数。
hash_map(const hash_map&) pointer 复制构造函数。
hash_map& operator=(const hash_map&) pointer 赋值运算符
void swap(hash_map&) pointer 交换两个 hash_map 的内容。
pair<iterator, bool>
insert(const value_type& x)
唯一关联容器 (Unique Associative Container) x插入到通过键在.
template <class InputIterator>
void insert(InputIterator f, InputIterator l)
[2]
唯一关联容器 (Unique Associative Container) 将范围插入到通过键在.
void erase(iterator pos) key_type 删除由pos.
指向的元素。 key_type size_type erase(const key_type& k)k.
删除键为 key_type void erase(iterator first, iterator last)
删除范围内的所有元素。 key_type void clear()
删除所有元素。 key_type const_iterator find(const key_type& k) constk.
查找键为 key_type const_iterator find(const key_type& k) constk.
iterator find(const key_type& k) 唯一关联容器 (Unique Associative Container) size_type count(const key_type& k) constk.
pair<const_iterator, const_iterator>
equal_range(const key_type& k) const
key_type 计算键为k.
pair<iterator, iterator>
equal_range(const key_type& k)
key_type 计算键为k.
data_type& 
operator[](const key_type& k) [3]
通过键在 查找包含所有键为
bool operator==(const hash_map&, 
                const hash_map&)
hasher 见下文。

测试两个 hash_map 是否相等。这是一个全局函数,而不是成员函数。

新成员通过键在.
成员 描述
data_type& 
operator[](const key_type& k) [3]
这些成员在 唯一哈希关联容器配对关联容器 要求中没有定义,而是特定于通过键在返回与特定键关联的对象的引用。如果尚不包含此类对象,则operator[]插入默认对象. [3]

data_type()

[1] 注释Hash_map::iterator不是可变迭代器,因为hash_map::value_type不是 可赋值的。也就是说,如果i的类型为hash_map::iterator并且i不是可变迭代器,因为p,则*i = p的类型为不是有效的表达式。但是,也不是常量迭代器,因为它可以用于修改它指向的对象。使用与上面相同的符号,(*i).second = p

是一个有效的表达式。[2] 此成员函数依赖于成员模板函数,目前(1998 年初)并非所有编译器都支持。如果您的编译器支持成员模板,则可以使用任何类型的 输入迭代器 调用此函数。但是,如果您的编译器尚不支持成员模板,则参数必须为类型const value_type*或类型.

hash_map::const_iterator尚不包含此类对象,则[3] 由于通过键在可能会将新元素插入到中,因此它不可能是const尚不包含此类对象,则成员函数。请注意,的定义非常简单m[k]等效于(*((m.insert(value_type(k, data_type()))).first)).second。严格来说,此成员函数是不必要的:它仅出于方便而存在。

另请参阅

关联容器哈希关联容器配对关联容器唯一哈希关联容器set, 对于“字典” multiset, multimap, hash_set, hash_multiset, hash_multimap
[Silicon Surf] [STL Home]
版权所有 © 1999 Silicon Graphics, Inc. 保留所有权利。 商标信息 (TrademarkInformation)