Всё, решил проблему, вопрос закрыт! Кому вдруг понадобится подобная работа с multimap ниже код, на форму добавить лишь компоненты Button1, Memo1 и желательно бы для красотульки multimap читать со StringGrid1:
| Код | void __fastcall TForm1::Button1Click(TObject *Sender) { Form1->Memo1->Clear(); multimap<float,float> multimap_Result; //создаём multimap multimap_Result.insert (make_pair(11,100)); //инициализируем инсертами multimap_Result.insert (make_pair(22,200)); multimap_Result.insert (make_pair(33,211)); multimap_Result.insert (make_pair(22,300)); multimap_Result.insert (make_pair(33,111)); multimap_Result.insert (make_pair(22,180)); multimap_Result.insert (make_pair(44,444)); multimap_Result.insert (make_pair(33,50));
float highest = multimap_Result.rbegin()->first; // можно без инициализации float move_iter = multimap_Result.rbegin()->first; multimap<float,float>::iterator it_r = multimap_Result.begin(); //итератор для внешнего цикла multimap<float,float>::iterator it_r1 = multimap_Result.begin(); //итератор для внутреннего цикла int i,j,z, n=8; //n = размеру вашего multimap int count=0; //счётчик, во внутреннем цикле, который считает к-во удалённых элементов и уменьшает итерации цикла на эту величину for(it_r=multimap_Result.begin(),i=0;it_r!=multimap_Result.end(),i<(n-count);it_r++,i++) { highest=it_r->first; float hi=it_r->second; //не нужно, держал чисто для debug'a for(it_r1=multimap_Result.begin(),j=0;it_r1!=multimap_Result.end(),j<(n-count);it_r1++,j++) { move_iter=it_r1->first; float move_sec=it_r1->second; //не нужно, держал чисто для debug'a if((move_iter==highest)&&(i<j)) //если ключи совпадают и значения находятся над главной диаг. и обязательно их итераторы { //не равны чтобы удалять только одинак. по ключам элем, но не 1-й найденный (самого себя) it_r->second=Maximum(it_r->second,(it_r1)->second); //поиск мах value для одинак. ключей, в проге ни на что не влияет multimap_Result.erase(it_r1); //удаляем 2-й одинаковый элемент с ключом, что находится на позиции итератора it_r1 count++; //к-во удалённых элементов i--; //уменьшаем счётчик внешнего цикла, нужно чтобы сделать ниже break и прервать цикл it_r--; //уменьшаем итератор внешнего цикла, для тех же целей break; } } } for(it_r=multimap_Result.begin(),i=0;it_r!=multimap_Result.end();it_r++,i++) { Form1->Memo1->Lines->Add(AnsiString((*it_r).first)+" ===> "+AnsiString((*it_r).second)+" ~~ i= "+AnsiString(i)); } } //---------------------------------------------------------------------------
|
|