SYNOPSIS
        mapping mkmapping(mixed *arr1, mixed *arr2,...)
        mapping mkmapping(struct st)

DESCRIPTION
        The first form returns a mapping with indices from 'arr1' and
        values from 'arr2'... . arr1[0] will index arr2...[0], arr1[1]
        will index arr2...[1], etc. If the arrays are of unequal size,
        the mapping will only contain as much elements as are in the
        smallest array.

        The second form converts the given struct <st> into a mapping
        using the struct member names as index values.

EXAMPLES
        mkmapping( ({ 1, 2 }), ({ 10, 11 }), ({ 20, 21, 22}))
          returns ([ 1:10;20, 2:11;21 ])

        struct s { int a; int *b; int c; };
        mkmapping( (<s> a: 1, b: ({ 2, 3 }), c: 3 )
          returns ([ "a":1, "b":({2,3}), "c":3 ])

HISTORY
        LDMud 3.3.433 added the conversion from structs.

SEE ALSO
        mappings(LPC), mappingp(E), m_indices(E), m_values(E),
        m_add(E), m_delete(E), sizeof(E), widthof(E), unmkmapping(E),
        to_struct(E)
