#include 
#include 
#include 
#include 
#include 

using namespace std;

#define LOOPS 5000000

#ifndef __GNUC__
typedef __int64 LONGLONG;
#else
typedef long long LONGLONG;
#endif // __GNUC__

union mstring
{
    char        name[8];
    LONGLONG    index;
    mstring(const char* str)
    {
        strncpy(name, str, 8);
    }
};

bool less::operator()(const mstring& x, const mstring& y) const
{
    return x.index < y.index;
}

int main()
{
    map ii;
    map csi;
    map msi;
    map sti;
    int i, r;
    clock_t t;

    ii[1] = 1;
    csi["From"] = 1;
    msi["From"] = 1;
    sti["From"] = 1;

    t = clock();
    for (i = 0; i < LOOPS; i++)
        r = ii[1];
    cout << "int:           " << clock() - t << " clocks" << endl;

    t = clock();
    for (i = 0; i < LOOPS; i++)
        r = csi["From"];
    cout << "const char*:   " << clock() - t << " clocks" << endl;

    t = clock();
    for (i = 0; i < LOOPS; i++)
        r = msi["From"];
    cout << "mstring:       " << clock() - t << " clocks" << endl;

    t = clock();
    for (i = 0; i < LOOPS; i++)
        r = sti["From"];
    cout << "std::string:   " << clock() - t << " clocks" << endl;

    return 0;
}

    Source: geocities.com/yongweiwu