Choć właściwie całość problemu znajduje się w tytule, to może jednak coś napisze. Chcę posortować tablice par
pair<int, int> para[ilosc];
nieistotne, po ktorym elemencie, zawsze moge przy make.pair() zamienic argumenty miejscami. Chcę to zrobic sortem z algorithm. Jak?
Czytając dokumentacje?
http://www.cplusplus.com/reference/algorithm/sort/
Masz tu nawet przykład z użyciem własnego komparatora. Napisz komparator który porównuje pary tak jak sobie chcesz i przekaż go jako 3 argument.
Właśnie za cholere nie potrafie tego zrozumiec, dlatego tu pisze.
Ale czego dokładnie? Trzecim argumentem może być funkcja która określa który z dwóch argumentów jest "większy" i tyle.
#include <iostream>
#include <algorithm>
#include <utility>
#include <ctime>
#include <vector>
using namespace std;
int comparator(pair<int,int> first, pair<int,int> second){
return first.first < second.first;
}
int main(){
vector<pair<int,int> > pairs;
srand(time(0));
for (int i=0;i<100;i++){
pair<int,int> element(rand()%100, rand()%100);
pairs.push_back(element);
}
sort(pairs.begin(), pairs.end(), comparator);
for (int i=0;i<100;i++){
cout<<pairs[i].first<<" "<<pairs[i].second<<endl;
}
return 0;
}
[code]
bool mycomp(pair<int, int> para[2])
{
if(para[0].second>para[1].second) return 0;
return 1;
}[/code]
nie do konca jestem pewien, co ma zwracac ta funkcja i jak się to ma do sorta.
EDIT: ok, czaje, dzieki wielkie :)
sort(begin(tab), end(tab), [](pair<int, int> v1, pair<int, int> v2) { return v1.first < v2.first; });
Wydaje mi się że nikt nie czyta pytania w którym jako alternatywę temu sortowaniu autor podaje:
zonkoo23 napisał(a):
... zawsze moge przy make.pair() zamienic argumenty miejscami
Czyli chodzi o zrobienie N dwuelementowych sortowań, gdzie N to ilość par.
Tak ja to rozumiem.
@_13th_Dragon to chyba jednak nie rozumiesz ;] Autor napisał ze nie obchodzi go czy sortujemy po pierwszym czy po drugim elemencie pary bo przecież kiedy je tworzy to może zamiast (x,y) dać (y,x) ;]