Посоветуйте, пожалуйста, как поступить

Тема в разделе "Общие вопросы по С и С++", создана пользователем ChAoS, 17 май 2006.

Статус темы:
Закрыта.
  1. ChAoS

    ChAoS Гость

    У меня возникла такая проблема. Надо на С++ написать прогу по заполнению контейнера multimap случайной последовательностью чисел. Реализовать в ней функции сортировки по значениям(не по ключам, а именно по значениям) в прямом и обратном порядке и ф-цию нахождения элемента приближенного к среднему. Прогу я написал, но вот функция сортировки в прямом порядке почему-то не хочет работать. :) Посоветуйте пожалуйста, как это исправить и как найти приближенный к среднему элемент. Буду очень благодарен.

    Исходник проги:
    #include<iostream>
    #include<map>
    #include<algorithm>
    using namespace std;
    using std::endl;
    using std::cout;
    typedef float T1;
    typedef float T2;
    typedef std::multimap<T1,T2, std::less<T1> /*,std::allocator<T1> */> MUL_MAP;

    typedef MUL_MAP::value_type sorted_entry_type;
    #define size 5
    void Print( const MUL_MAP &kl);
    void Sort_ob1(const MUL_MAP &rt);
    void Sort_ob2(const MUL_MAP &pt);

    int main()
    {
    int* mas;
    mas=new int[size+1];;
    int j,i,M,K;
    int* kmas;
    kmas=new int[size+1];
    int n,m;
    cout<<"Elements:"<<endl;
    cout<<"Vveidte J: ? ";
    cin>>j;
    srand(j);
    for (i=0; i<size; i++)
    {mas=rand();
    cout<<"ZNACH mas["<<i<<"]= "<<mas<<endl;}

    cout<<"Keys:"<<endl;
    cout<<"Vveidte M: ? ";
    cin>>m;
    srand(m);
    for (n=0; n<size; n++)
    { kmas[n]=rand();
    cout<<"KEY kmas["<<n<<"]= "<<kmas[n]<<endl;}

    MUL_MAP mmm;

    for (n=0; n<size; n++)
    { M=mas[n];
    K=kmas[n];
    mmm.insert(MUL_MAP::value_type(K,M));

    K=0;M=0;}

    Print(mmm);
    Sort_ob1(mmm);
    Sort_ob2(mmm);


    return 0;
    }
    void Print( const MUL_MAP &kl)
    {
    MUL_MAP::const_iterator itr;
    cout<<"Soderzhomoe MUL_MAP="<<endl;
    for(itr=kl.begin();itr!=kl.end();itr++)
    cout<<"key ="<<itr->first<<" znach="<<itr->second<<endl;
    }

    void printSortedEntry(const sorted_entry_type &entry)
    { cout<<"key= "<< entry.first << " znach=" << entry.second << endl;
    }

    void Sort_ob1(const MUL_MAP &pt)
    {
    MUL_MAP::const_iterator itr;
    MUL_MAP sortdata;
    MUL_MAP::value_type val;
    cout<<"Sortirovka w pryamom poryadke"<<endl;
    cout<<"Sodershomoe SORTMUL_MAP"<<endl;
    for(itr=pt.begin();itr!=pt.end();itr++)
    sortdata.insert(MUL_MAP::value_type(itr->second, itr->first));
    for_each(sortdata.begin(),sortdata.end(),printSortedEntry);

    }

    void Sort_ob2(const MUL_MAP &rt)
    {
    MUL_MAP::const_iterator itr;
    MUL_MAP sortdata;
    MUL_MAP::value_type val;
    cout<<"Sortirovka w obratnom poryadke"<<endl;
    cout<<"Sodershomoe SORTMUL_MAP"<<endl;
    for(itr=rt.begin();itr!=rt.end();itr++)
    sortdata.insert(MUL_MAP::value_type(itr->second, itr->first));
    itr=rt.end();
    for(itr--;itr!=rt.begin();itr--)
    cout<<"key= "<< itr->second << " znach=" << itr->first << endl;
    cout<<"key= "<< itr->second << " znach=" << itr->first << endl;



    }
     
  2. eBit

    eBit Гость

    Если ты пользуешся STL
    то используй алгоритмы сортировки с самого STL
    а также функторы
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей