博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++ std::unordered_set
阅读量:4320 次
发布时间:2019-06-06

本文共 7890 字,大约阅读时间需要 26 分钟。

std::unordered_set

template < class Key,                        // unordered_set::key_type/value_type           class Hash = hash
, // unordered_set::hasher class Pred = equal_to
, // unordered_set::key_equal class Alloc = allocator
// unordered_set::allocator_type > class unordered_set;

Unordered Set

Unordered sets are containers that store unique elements in no particular order, and which allow for fast retrieval of individual elements based on their value.

In an unordered_set, the value of an element is at the same time its key, that identifies it uniquely. Keys are immutable(不可变), therefore, the elements in an unordered_set cannot be modified once in the container - they can be inserted and removed, though.

Internally, the elements in the unordered_set are not sorted in any particular order, but organized into buckets depending on their hash values to allow for fast access to individual elements directly by their values (with a constant average time complexity on average).

unordered_set containers are faster than set containers to access individual elements by their key, although they are generally less efficient for range iteration through a subset of their elements.

Iterators in the container are at least forward iterators.

Container properties

  • Associative: Elements in associative containers are referenced by their key and not by their absolute position in the container.
  • Unordered: Unordered containers organize their elements using hash tables that allow for fast access to elements by their key.
  • Set: The value of an element is also the key used to identify it.
  • Unique: keys No two elements in the container can have equivalent keys.
  • Allocator-aware: The container uses an allocator object to dynamically handle its storage needs.

Template parameters

  • Key: Type of the elements. Each element in an unordered_set is also uniquely identified by this value. Aliased as member types unordered_set::key_type and unordered_set::value_type.
  • Hash: A unary function object type that takes an object of the same type as the elements as argument and returns a unique value of type size_t based on it. This can either be a class implementing a function call operator or a pointer to a function (see constructor for an example). This defaults to hash, which returns a hash value with a probability of collision approaching 1.0/std::numeric_limits::max(). The unordered_set object uses the hash values returned by this function to organize its elements internally, speeding up the process of locating individual elements. Aliased as member type unordered_set::hasher.
  • Pred: A binary predicate that takes two arguments of the same type as the elements and returns a bool. The expression pred(a,b), where pred is an object of this type and a and b are key values, shall return true if a is to be considered equivalent to b. This can either be a class implementing a function call operator or a pointer to a function (see constructor for an example). This defaults to equal_to, which returns the same as applying the equal-to operator (a==b). The unordered_set object uses this expression to determine whether two element keys are equivalent. No two elements in an unordered_set container can have keys that yield true using this predicate. Aliased as member type unordered_set::key_equal.
  • Alloc: Type of the allocator object used to define the storage allocation model. By default, the allocator class template is used, which defines the simplest memory allocation model and is value-independent. Aliased as member type unordered_set::allocator_type.

In the reference for the unordered_set member functions, these same names (Key, Hash, Pred and Alloc) are assumed for the template parameters.

Member types

The following aliases are member types of unordered_set. They are widely used as parameter and return types by member functions:

member type definition notes
key_type the first template parameter (Key)
value_type the first template parameter (Key) The same as key_type
hasher the second template parameter (Hash) defaults to: hash
key_equal the third template parameter (Pred) defaults to: equal_to
allocator_type the fourth template parameter (Alloc) defaults to: allocator
reference Alloc::reference
const_reference Alloc::const_reference
pointer Alloc::pointer for the default allocator: value_type*
const_pointer Alloc::const_pointer for the default allocator: const value_type*
iterator a forward iterator to const value_type * convertible to const_iterator
const_iterator a forward iterator to const value_type *
local_iterator a forward iterator to const value_type * convertible to const_local_iterator
const_local_iterator a forward iterator to const value_type *
size_type an unsigned integral type usually the same as size_t
difference_type a signed integral type usually the same as ptrdiff_t

*Note: All iterators in an unordered_set point to const elements. Whether the const_ member type is the same type as its non-const_ counterpart depends on the particular library implementation, but programs should not rely on them being different to overload functions: const_iterator is more generic, since iterator is always convertible to it.

The same applies to local_ and non-local_ iterator types: they may either be the same type or not, but a program should not rely on them being different.

Member functions

  • (constructor):Construct unordered_set (public member function )
  • (destructor): Destroy unordered set (public member function)
  • operator= Assign content (public member function )

Capacity

empty, size, max_size

Iterators

begin, end, cbegin, cend

Element lookup

  • find: Get iterator to element (public member function)
  • count: Count elements with a specific key (public member function)
  • equal_range: Get range of elements with a specific key (public member function)

Modifiers

  • emplace: Construct and insert element (public member function )
  • emplace_hint: Construct and insert element with hint (public member function)
  • insert: Insert elements (public member function )
  • erase: Erase elements (public member function )
  • clear: Clear content (public member function)
  • swap: Swap content (public member function)

Buckets

  • bucket_count: Return number of buckets (public member function)
  • max_bucket_count: Return maximum number of buckets (public member function)
  • bucket_size: Return bucket size (public member type)
  • bucket: Locate element's bucket (public member function)

Hash policy

  • load_factor: Return load factor (public member function)
  • max_load_factor: Get or set maximum load factor (public member function)
  • rehash: Set number of buckets (public member function )
  • reserve: Request a capacity change (public member function)

Observers

  • hash_function: Get hash function (public member type )
  • key_eq: Get key equivalence predicate (public member type)
  • get_allocator: Get allocator (public member function)

Non-member function overloads

  • operators (unordered_set) Relational operators for unordered_set (function template )
  • swap (unordered_set) Exchanges contents of two unordered_set containers (function template )

Code Example

#include 
#include
#include
using namespace std;template
T cmerge(T a, T b){ T t(a); t.insert(b.begin(), b.end()); return t;}int main(int argc, char **argv){ unordered_set
first1; unordered_set
first2( {"one", "two", "three"} ); unordered_set
first3( {"red", "green", "blue"} ); unordered_set
first4( first2 ); unordered_set
first5( cmerge(first4,first3) ); unordered_set
first6( first5.begin(), first5.end() ); cout << "\nFirst6 set: "; for(const string& x: first6 ){ cout << " " << x; } return 0; /** other function please to see the unordered_map */

Reference


转载于:https://www.cnblogs.com/zi-xing/p/6388179.html

你可能感兴趣的文章
thinksns 分页数据
查看>>
os模块
查看>>
LINQ to SQL vs. NHibernate
查看>>
基于Angular5和WebAPI的增删改查(一)
查看>>
windows 10 & Office 2016 安装
查看>>
最短路径(SP)问题相关算法与模板
查看>>
js算法之最常用的排序
查看>>
Python——交互式图形编程
查看>>
经典排序——希尔排序
查看>>
团队编程项目作业2-团队编程项目代码设计规范
查看>>
英特尔公司将停止910GL、915GL和915PL芯片组的生产
查看>>
团队编程项目作业2-团队编程项目开发环境搭建过程
查看>>
<Using parquet with impala>
查看>>
07-Java 中的IO操作
查看>>
通过镜像下载Android系统源码
查看>>
Maven配置
查看>>
HttpServletRequest /HttpServletResponse
查看>>
SAM4E单片机之旅——24、使用DSP库求向量数量积
查看>>
从远程库克隆库
查看>>
codeforces Unusual Product
查看>>