STL Sort on Multidimentional Data:                                                Code
#include <iostream.h>
#include <algorithm>
#include <vector>

using namespace std;

class CSortData
{
public:
    char    m_szSymbol[5];
    long    m_lVolume;
    double  m_dLast;
};

struct Arg2Sort
{
    bool operator() (const CSortData & x, const CSortData & y )
    {
        return x.m_lVolume > y.m_lVolume;
    }
};

struct Arg3Sort
{
    bool operator() (const CSortData & x, const CSortData & y )
    {
        return x.m_dLast > y.m_dLast;
    }
};

void main()
{
    CSortData m_SortData;
    vector<CSortData> m_vecSortData;
    vector<CSortData>::iterator it;
	
    strcpy(m_SortData.m_szSymbol, "MSFT");
    m_SortData.m_lVolume      = 28785500; 
    m_SortData.m_dLast        = 55.88; 

    m_vecSortData.push_back( m_SortData );

    strcpy( m_SortData.m_szSymbol, "INTL" );    
    m_SortData.m_lVolume      = 50503100;
    m_SortData.m_dLast        = 31.44; 

    m_vecSortData.push_back( m_SortData );

    strcpy( m_SortData.m_szSymbol, "CSCO" );
    m_SortData.m_lVolume      = 100864300;
    m_SortData.m_dLast        = 26.06;

    m_vecSortData.push_back( m_SortData );

    cout << "\n"                              << endl;
    cout << "    02/21/01 NASDAQ Data       " << endl;
    cout << "\n"                              << endl;
    cout << "/******************************" << endl;
    cout << "Symbol   Volume         Close  " << endl;
    cout << "******************************/" << endl;
    cout << "\n"                              << endl;

    for ( it = m_vecSortData.begin(); it != m_vecSortData.end(); it++ )

        cout << it->m_szSymbol << "\t"
             << it->m_lVolume  << "\t"
             << it->m_dLast    << endl;

    cout << "\n"                              << endl;
    cout << "/******************************" << endl;
    cout << "       Sorted By Volume        " << endl;
    cout << "******************************/" << endl;
    cout << "\n"                              << endl;

    std::sort( m_vecSortData.begin(), m_vecSortData.end(), Arg2Sort());	
	
    for ( it = m_vecSortData.begin(); it != m_vecSortData.end(); it++ )
    
        cout << it->m_szSymbol << "\t"
             << it->m_lVolume  << "\t"
             << it->m_dLast    << endl;

    cout << "\n"                              << endl;
    cout << "/******************************" << endl;
    cout << "       Sorted By Close         " << endl;
    cout << "******************************/" << endl;
    cout << "\n"                              << endl;

    std::sort( m_vecSortData.begin(), m_vecSortData.end(), Arg3Sort() );

    for ( it = m_vecSortData.begin(); it != m_vecSortData.end(); it++ )

        cout << it->m_szSymbol << "\t"
             << it->m_lVolume  << "\t"
             << it->m_dLast   << endl;
        cout << "\n         " << endl;
}

Console Output:


    02/21/01 NASDAQ Data      

/******************************
Symbol   Volume         Close  
******************************/

MSFT    28785500        55.88
INTL    50503100        31.44
CSCO    100864300       26.06

/******************************
       Sorted By Volume       
******************************/

CSCO    100864300       26.06
INTL    50503100        31.44
MSFT    28785500        55.88


/******************************
       Sorted By Close        
******************************/

MSFT    28785500        55.88
INTL    50503100        31.44
CSCO    100864300       26.06

(c) 2001, Stan Malevanny