SGI

hash_set<Key, HashFcn, EqualKey, Alloc>

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

描述

Hash_set是一个哈希关联容器,它存储类型为Key. Hash_set的对象。它是一个简单关联容器,这意味着它的值类型以及它的键类型都是Key。它也是一个唯一关联容器,这意味着使用二元谓词EqualKey.

Hash_set比较时,没有两个元素相等。在需要快速搜索元素的应用程序中很有用。但是,如果元素需要按特定顺序排列,则set更合适。

示例

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

void lookup(const hash_set<const char*, hash<const char*>, eqstr>& Set,
            const char* word)
{
  hash_set<const char*, hash<const char*>, eqstr>::const_iterator it
    = Set.find(word);
  cout << word << ": "
       << (it != Set.end() ? "present" : "not present")
       << endl;
}

int main()
{
  hash_set<const char*, hash<const char*>, eqstr> Set;
  Set.insert("kiwi");
  Set.insert("plum");
  Set.insert("apple");
  Set.insert("mango");
  Set.insert("apricot");
  Set.insert("banana");

  lookup(Set, "mango");
  lookup(Set, "apple");
  lookup(Set, "durian");
}

定义

在头文件hash_set和向后兼容的头文件hash_set.h中定义。此类是 SGI 扩展;它不是 C++ 标准的一部分。

模板参数

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

模型

唯一哈希关联容器简单关联容器

类型要求

公共基类

无。

成员

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

新成员

所有hash_set的成员都在唯一哈希关联容器简单关联容器要求中定义。Hash_set没有引入任何新成员。

备注

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

另请参阅

关联容器哈希关联容器简单关联容器唯一哈希关联容器set, map, multiset, multimap, hash_map, hash_multiset, hash_multimap
[Silicon Surf] [STL Home]
版权所有 © 1999 Silicon Graphics, Inc. 保留所有权利。 商标信息