类别:容器 (containers) | 组件类型:类型 (type) |
进行比较时相等。通过键在hash_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 | 的分配器,用于所有内部内存管理。 |
成员 | 成员 | 描述 |
---|---|---|
定义位置 | 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 | 见下文。 |
成员 | 描述 |
---|---|
data_type& operator[](const key_type& k) [3] |
这些成员在 唯一哈希关联容器 和 配对关联容器 要求中没有定义,而是特定于通过键在返回与特定键关联的对象的引用。如果尚不包含此类对象,则operator[]插入默认对象. [3] |
[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。严格来说,此成员函数是不必要的:它仅出于方便而存在。