vector<pair>
Ինչպես հասկացանք կարելի է հայտարարել ցակացած տիպի
vector
զանգված։ Այսինքն կարելի է նաև օրինակ հայտարարել vector< pair <int, double> >
տիպի զանգված։ Կամ vector< pair <long long, long long> >
տիպի։Եթե ցանկանում ենք պահել կոորդինատների զանգված, ապա կարող ենք հայտարարել
vector< pair <double, double> > points;
տիպի զանգված։ Ապա points[0].first
-ը կլինի առաջին կետի x
կոորդինատը, իսկ points[0].second
-ը y
կոորդինատը։Կարելի է նաև հայտարարել
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