Map Adaptors

- Main Page
- Modules
- Classes
- Namespaces
- Files
- Related Pages

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Classes | Functions
Map Adaptors
Maps

## Detailed Description

This group contains map adaptors that are used to create "implicit" maps from other maps.

Most of them are read-only maps. They can make arithmetic and logical operations between one or two maps (negation, shifting, addition, multiplication, logical 'and', 'or', 'not' etc.) or e.g. convert a map to another one of different Value type.

The typical usage of this classes is passing implicit maps to algorithms. If a function type algorithm is called then the function type map adaptors can be used comfortable. For example let's see the usage of map adaptors with the `graphToEps()` function.

Color nodeColor(int deg) {
if (deg >= 2) {
return Color(0.5, 0.0, 0.5);
} else if (deg == 1) {
return Color(1.0, 0.5, 1.0);
} else {
return Color(0.0, 0.0, 0.0);
}
}
Digraph::NodeMap<int> degree_map(graph);
graphToEps(graph, "graph.eps")
.coords(coords).scaleToA4().undirected()
.nodeColors(composeMap(functorToMap(nodeColor), degree_map))
.run();

The `functorToMap()` function makes an `int` to `Color` map from the `nodeColor()` function. The `composeMap()` compose the `degree_map` and the previously created map. The composed map is a proper function to get the color of each node.

The usage with class type algorithms is little bit harder. In this case the function type map adaptors can not be used, because the function map adaptors give back temporary objects.

Digraph graph;
typedef Digraph::ArcMap<double> DoubleArcMap;
DoubleArcMap length(graph);
DoubleArcMap speed(graph);
typedef DivMap<DoubleArcMap, DoubleArcMap> TimeMap;
TimeMap time(length, speed);
Dijkstra<Digraph, TimeMap> dijkstra(graph, time);
dijkstra.run(source, target);

We have a length map and a maximum speed map on the arcs of a digraph. The minimum time to pass the arc can be calculated as the division of the two maps which can be done implicitly with the `DivMap` template class. We use the implicit minimum time map as the length map of the `Dijkstra` algorithm.

## Classes
class | ComposeMap< M1, M2 >
| Composition of two maps. More...
class | CombineMap< M1, M2, F, V >
| Combination of two maps using an STL (binary) functor. More...
class | FunctorToMap< F, K, V >
| Converts an STL style (unary) functor to a map. More...
class | MapToFunctor< M >
| Converts a map to an STL style (unary) functor. More...
class | ConvertMap< M, V >
| Map adaptor to convert the `Value` type of a map to another type using the default conversion. More...
class | ForkMap< M1, M2 >
| Applies all map setting operations to two maps. More...
class | AddMap< M1, M2 >
| Sum of two maps. More...
class | SubMap< M1, M2 >
| Difference of two maps. More...
class | MulMap< M1, M2 >
| Product of two maps. More...
class | DivMap< M1, M2 >
| Quotient of two maps. More...
class | ShiftMap< M, C >
| Shifts a map with a constant. More...
class | ShiftWriteMap< M, C >
| Shifts a map with a constant (read-write version). More...
class | ScaleMap< M, C >
| Scales a map with a constant. More...
class | ScaleWriteMap< M, C >
| Scales a map with a constant (read-write version). More...
class | NegMap< M >
| Negative of a map. More...
class | NegWriteMap< M >
| Negative of a map (read-write version) More...
class | AbsMap< M >
| Absolute value of a map. More...
class | AndMap< M1, M2 >
| Logical 'and' of two maps. More...
class | OrMap< M1, M2 >
| Logical 'or' of two maps. More...
class | NotMap< M >
| Logical 'not' of a map. More...
class | NotWriteMap< M >
| Logical 'not' of a map (read-write version) More...
class | EqualMap< M1, M2 >
| Combination of two maps using the `==` operator. More...
class | LessMap< M1, M2 >
| Combination of two maps using the `<` operator. More...

## Functions
template<typename M1 , typename M2 >
ComposeMap< M1, M2 > | composeMap (const M1 &m1, const M2 &m2)
| Returns a `ComposeMap` class. More...
template<typename M1 , typename M2 , typename F , typename V >
CombineMap< M1, M2, F, V > | combineMap (const M1 &m1, const M2 &m2, const F &f)
| Returns a `CombineMap` class. More...
template<typename K , typename V , typename F >
FunctorToMap< F, K, V > | functorToMap (const F &f)
| Returns a `FunctorToMap` class. More...
template<typename M >
MapToFunctor< M > | mapToFunctor (const M &m)
| Returns a `MapToFunctor` class. More...
template<typename V , typename M >
ConvertMap< M, V > | convertMap (const M &map)
| Returns a `ConvertMap` class. More...
template<typename M1 , typename M2 >
ForkMap< M1, M2 > | forkMap (M1 &m1, M2 &m2)
| Returns a `ForkMap` class. More...
template<typename M1 , typename M2 >
AddMap< M1, M2 > | addMap (const M1 &m1, const M2 &m2)
| Returns an `AddMap` class. More...
template<typename M1 , typename M2 >
SubMap< M1, M2 > | subMap (const M1 &m1, const M2 &m2)
| Returns a `SubMap` class. More...
template<typename M1 , typename M2 >
MulMap< M1, M2 > | mulMap (const M1 &m1, const M2 &m2)
| Returns a `MulMap` class. More...
template<typename M1 , typename M2 >
DivMap< M1, M2 > | divMap (const M1 &m1, const M2 &m2)
| Returns a `DivMap` class. More...
template<typename M , typename C >
ShiftMap< M, C > | shiftMap (const M &m, const C &v)
| Returns a `ShiftMap` class. More...
template<typename M , typename C >
ShiftWriteMap< M, C > | shiftWriteMap (M &m, const C &v)
| Returns a `ShiftWriteMap` class. More...
template<typename M , typename C >
ScaleMap< M, C > | scaleMap (const M &m, const C &v)
| Returns a `ScaleMap` class. More...
template<typename M , typename C >
ScaleWriteMap< M, C > | scaleWriteMap (M &m, const C &v)
| Returns a `ScaleWriteMap` class. More...
template<typename M >
NegMap< M > | negMap (const M &m)
| Returns a `NegMap` class. More...
template<typename M >
NegWriteMap< M > | negWriteMap (M &m)
| Returns a `NegWriteMap` class. More...
template<typename M >
AbsMap< M > | absMap (const M &m)
| Returns an `AbsMap` class. More...
template<typename M1 , typename M2 >
AndMap< M1, M2 > | andMap (const M1 &m1, const M2 &m2)
| Returns an `AndMap` class. More...
template<typename M1 , typename M2 >
OrMap< M1, M2 > | orMap (const M1 &m1, const M2 &m2)
| Returns an `OrMap` class. More...
template<typename M >
NotMap< M > | notMap (const M &m)
| Returns a `NotMap` class. More...
template<typename M >
NotWriteMap< M > | notWriteMap (M &m)
| Returns a `NotWriteMap` class. More...
template<typename M1 , typename M2 >
EqualMap< M1, M2 > | equalMap (const M1 &m1, const M2 &m2)
| Returns an `EqualMap` class. More...
template<typename M1 , typename M2 >
LessMap< M1, M2 > | lessMap (const M1 &m1, const M2 &m2)
| Returns an `LessMap` class. More...

## Function Documentation

ComposeMap< M1, M2 > composeMap | ( | const M1 & | m1,
|  | const M2 & | m2
| ) |  |
| related

This function just returns a `ComposeMap` class.

If `m1` and `m2` are maps and the `Value` type of `m2` is convertible to the `Key` of `m1`, then `composeMap(m1,m2)[x]` will be equal to `m1[m2[x]]`.

CombineMap< M1, M2, F, V > combineMap | ( | const M1 & | m1,
|  | const M2 & | m2,
|  | const F & | f
| ) |  |
| related

This function just returns a `CombineMap` class.

For example, if `m1` and `m2` are both maps with `double` values, then

* combineMap(m1,m2,std::plus<double>())
*

is equivalent to

* addMap(m1,m2)
*

This function is specialized for adaptable binary function classes and C++ functions.

FunctorToMap< F, K, V > functorToMap | ( | const F & | f | ) |
| related

This function just returns a `FunctorToMap` class.

This function is specialized for adaptable binary function classes and C++ functions.

MapToFunctor< M > mapToFunctor | ( | const M & | m | ) |
| related

This function just returns a `MapToFunctor` class.

ConvertMap< M, V > convertMap | ( | const M & | map | ) |
| related

This function just returns a `ConvertMap` class.

ForkMap< M1, M2 > forkMap | ( | M1 & | m1,
|  | M2 & | m2
| ) |  |
| related

This function just returns a `ForkMap` class.

AddMap< M1, M2 > addMap | ( | const M1 & | m1,
|  | const M2 & | m2
| ) |  |
| related

This function just returns an `AddMap` class.

For example, if `m1` and `m2` are both maps with `double` values, then `addMap(m1,m2)[x]` will be equal to `m1[x]+m2[x]`.

SubMap< M1, M2 > subMap | ( | const M1 & | m1,
|  | const M2 & | m2
| ) |  |
| related

This function just returns a `SubMap` class.

For example, if `m1` and `m2` are both maps with `double` values, then `subMap(m1,m2)[x]` will be equal to `m1[x]-m2[x]`.

MulMap< M1, M2 > mulMap | ( | const M1 & | m1,
|  | const M2 & | m2
| ) |  |
| related

This function just returns a `MulMap` class.

For example, if `m1` and `m2` are both maps with `double` values, then `mulMap(m1,m2)[x]` will be equal to `m1[x]*m2[x]`.

DivMap< M1, M2 > divMap | ( | const M1 & | m1,
|  | const M2 & | m2
| ) |  |
| related

This function just returns a `DivMap` class.

For example, if `m1` and `m2` are both maps with `double` values, then `divMap(m1,m2)[x]` will be equal to `m1[x]/m2[x]`.

ShiftMap< M, C > shiftMap | ( | const M & | m,
|  | const C & | v
| ) |  |
| related

This function just returns a `ShiftMap` class.

For example, if `m` is a map with `double` values and `v` is `double`, then `shiftMap(m,v)[x]` will be equal to `m[x]+v`.

ShiftWriteMap< M, C > shiftWriteMap | ( | M & | m,
|  | const C & | v
| ) |  |
| related

This function just returns a `ShiftWriteMap` class.

For example, if `m` is a map with `double` values and `v` is `double`, then `shiftWriteMap(m,v)[x]` will be equal to `m[x]+v`. Moreover it makes also possible to write the map.

ScaleMap< M, C > scaleMap | ( | const M & | m,
|  | const C & | v
| ) |  |
| related

This function just returns a `ScaleMap` class.

For example, if `m` is a map with `double` values and `v` is `double`, then `scaleMap(m,v)[x]` will be equal to `v*m[x]`.

ScaleWriteMap< M, C > scaleWriteMap | ( | M & | m,
|  | const C & | v
| ) |  |
| related

This function just returns a `ScaleWriteMap` class.

For example, if `m` is a map with `double` values and `v` is `double`, then `scaleWriteMap(m,v)[x]` will be equal to `v*m[x]`. Moreover it makes also possible to write the map.

NegMap< M > negMap | ( | const M & | m | ) |
| related

This function just returns a `NegMap` class.

For example, if `m` is a map with `double` values, then `negMap(m)[x]` will be equal to `-m[x]`.

NegWriteMap< M > negWriteMap | ( | M & | m | ) |
| related

This function just returns a `NegWriteMap` class.

For example, if `m` is a map with `double` values, then `negWriteMap(m)[x]` will be equal to `-m[x]`. Moreover it makes also possible to write the map.

AbsMap< M > absMap | ( | const M & | m | ) |
| related

This function just returns an `AbsMap` class.

For example, if `m` is a map with `double` values, then `absMap(m)[x]` will be equal to `m[x]` if it is positive or zero and `-m[x]` if `m[x]` is negative.

AndMap< M1, M2 > andMap | ( | const M1 & | m1,
|  | const M2 & | m2
| ) |  |
| related

This function just returns an `AndMap` class.

For example, if `m1` and `m2` are both maps with `bool` values, then `andMap(m1,m2)[x]` will be equal to `m1[x]&&m2[x]`.

OrMap< M1, M2 > orMap | ( | const M1 & | m1,
|  | const M2 & | m2
| ) |  |
| related

This function just returns an `OrMap` class.

For example, if `m1` and `m2` are both maps with `bool` values, then `orMap(m1,m2)[x]` will be equal to `m1[x]||m2[x]`.

NotMap< M > notMap | ( | const M & | m | ) |
| related

This function just returns a `NotMap` class.

For example, if `m` is a map with `bool` values, then `notMap(m)[x]` will be equal to `!m[x]`.

NotWriteMap< M > notWriteMap | ( | M & | m | ) |
| related

This function just returns a `NotWriteMap` class.

For example, if `m` is a map with `bool` values, then `notWriteMap(m)[x]` will be equal to `!m[x]`. Moreover it makes also possible to write the map.

EqualMap< M1, M2 > equalMap | ( | const M1 & | m1,
|  | const M2 & | m2
| ) |  |
| related

This function just returns an `EqualMap` class.

For example, if `m1` and `m2` are maps with keys and values of the same type, then `equalMap(m1,m2)[x]` will be equal to `m1[x]==m2[x]`.

LessMap< M1, M2 > lessMap | ( | const M1 & | m1,
|  | const M2 & | m2
| ) |  |
| related

This function just returns an `LessMap` class.

For example, if `m1` and `m2` are maps with keys and values of the same type, then `lessMap(m1,m2)[x]` will be equal to `m1[x]<m2[x]`.