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

  • Автор темы ChAoS
  • Дата начала
Статус
Закрыто для дальнейших ответов.
C

ChAoS

Гость
#1
У меня возникла такая проблема. Надо на С++ написать прогу по заполнению контейнера 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;



}
 
E

eBit

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