类别: 容器 | 组件类型: 类型 |
比较相等的键,元素数量没有限制。通过键查找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"); }
参数 | 描述 | 默认值 |
---|---|---|
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 是否相等。这是一个全局函数,而不是成员函数。 |
[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.