vector<pair>

Ինչպես հասկացանք կարելի է հայտարարել ցակացած տիպի vector զանգված։ Այսինքն կարելի է նաև օրինակ հայտարարել vector< pair <int, double> > տիպի զանգված։ Կամ vector< pair <long long, long long> > տիպի։
Եթե ցանկանում ենք պահել կոորդինատների զանգված, ապա կարող ենք հայտարարել vector< pair <double, double> > points; տիպի զանգված։ Ապա points[0].first -ը կլինի առաջին կետի x կոորդինատը, իսկ points[0].secondy կոորդինատը։
 
Կարելի է նաև հայտարարել x, y, z կոորդինատների համար զանգված։
//                           [ (5, 6) (0, -1) (10, 20) ]
vector< pair <int, int> > xy{ {5, 6}, {0, -1}, {10, 20} };
vector< pair <int, pair <int, int> > > xyz{ {5, {2, 3}}, {6, {4, -1}} };
//                           [ (5, 2, 3) (6, 4, -1) ]
pair-ների հետ հատկապես հարմար է աշխատել քանի որ նրանց կարելի է իրար հետ համեմատել, և հետևաբար, նաև դասավորել ըստ աճման կարգի։ Համեմատելուց նրանք սկզբից համեմատվում են ըստ .first-ի իսկ եթե երկուսի արժեքները հավասար են, ապա ըստ .second-ի։
 
Ամենահաճախ պատահող կիրառությունը լինում է, երբ կարիք է լինում զանգվածի էլեմենտները դասակարգել ըստ աճման կարգի, բայց նաև պահել իրենց սկզբնական դիրքի մասին ինֆորմացիան։ Օրինակ, դա կարելի է անել հետևյալ կերպ՝
vector <int> v{1, 10, -3, 0, -5, 7, 3, 11};

vector< pair <int, int> > c;
for (int i=0; i < v.size(); ++i)
	c.push_back({v[i], i});      // (արժեք, դիրք)

sort(c.begin(), c.end());
for (int i=0; i < c.size(): ++i)
	cout << "val:" << c[i].first << " initial index:" << c[i].second << endl;
 
Վարժություն՝
Տրված են n հատ կետեր, անհրաժեշտ է դասակարգել նրանց (0, 0) կետից իրենց հեռավորությամբ՝ աճման կարգով։ (2 ≤ n ≤ )
Մուտք
Ելք
5 5 6 3 4 1 2 10 10 3 3
1 2 3 3 3 4 5 6 10 10
 

Constraints

Time limit: 0.4 seconds

Memory limit: 512 MB

Output limit: 5 MB

To check your solution you need to sign in