## CGAL::Inverse_index<IC>

### Definition

The class Inverse_index<IC> constructs an inverse index for a given range [i,j) of two iterators or circulators of type IC. The first element I in the range [i,j) has the index 0. Consecutive elements are numbered incrementally. The inverse index provides a query for a given iterator or circulator k to retrieve its index number. Precondition: The iterator or circulator must be either of the random access category or the dereference operator must return stable and distinguishable addresses for the values, e.g. proxies or non-modifiable iterator with opaque values will not work.

#include <CGAL/iterator.h>

### Creation

Inverse_index<IC> inverse;
| invalid index.
Inverse_index<IC> inverse ( IC i);
| empty inverse index initialized to start at i.
Inverse_index<IC> inverse ( IC i, IC j);
| inverse index initialized with range [i,j).

### Operations

std::size_t | inverse [ IC k] | returns inverse index of k. Precondition: k has been stored in the inverse index.
void | inverse.push_back ( IC k)
|  | adds k at the end of the indices.

### Implementation

For random access iterators or circulators, it is done in constant time by subtracting i. For other iterator categories, an STL map is used, which results in a logj-i query time. The comparisons are done using the operator operator< on pointers.

### See Also

CGAL::Random_access_adaptor<IC>
CGAL::Random_access_value_adaptor<IC,T>