Front Page / Sequences / Concepts / Associative Sequence

# Associative Sequence

### Description

An Associative Sequence is a Forward Sequence that allows efficient retrieval of elements based on keys. Unlike associative containers in the C++ Standard Library, MPL associative sequences have no associated ordering relation. Instead, type identity is used to impose an equivalence relation on keys, and the order in which sequence elements are traversed during iteration is left unspecified.

### Definitions

- A key is a part of the element type used to identify and retrieve the element within the sequence.
- A value is a part of the element type retrievied from the sequence by its key.

### Expression requirements

In the following table and subsequent specifications, `s` is an Associative Sequence, `x` is a sequence element, and `k` and `def` are arbitrary types.

In addition to the requirements defined in Forward Sequence, the following must be met:

Expression | Type | Complexity
--- | --- | ---
`has_key<s,k>::type` | Boolean Integral Constant | Amortized constant time
`count<s,k>::type` | Integral Constant | Amortized constant time
`order<s,k>::type` | Integral Constant or `void_` | Amortized constant time
`at<s,k>::type` | Any type | Amortized constant time
`at<s,k,def>::type` | Any type | Amortized constant time
`key_type<s,x>::type` | Any type | Amortized constant time
`value_type<s,x>::type` | Any type | Amortized constant time

### Expression semantics

The semantics of an expression are defined only where they differ from, or are not defined in Forward Sequence.

Expression | Semantics
--- | ---
`has_key<s,k>::type` | A boolean Integral Constant `c` such that `c::value == true` if and only if there is one or more elements with the key `k` in `s`; see `has_key`.
`count<s,k>::type` | The number of elements with the key `k` in `s`; see `count`.
`order<s,k>::type` | A unique unsigned Integral Constant associated with the key `k` in the sequence `s`; see `order`.

    at<s,k>::type
    at<s,k,def>::type

The first element associated with the key `k` in the sequence `s`; see `at`.

`key_type<s,x>::type` | The key part of the element `x` that would be used to identify `x` in `s`; see `key_type`.
`value_type<s,x>::type` | The value part of the element `x` that would be used for `x` in `s`; see `value_type`.

### Models

- `set`
- `map`

### See also

Sequences, Extensible Associative Sequence, `has_key`, `count`, `order`, `at`, `key_type`, `value_type`