Головна Обговорення Лінки Пошук Prykladna СС Прикладна _КОЛЕДЖ 28.03.2024 19:39:13 (EEST=GMT+2)
ACM -
Навігація -
Теми форуму +
Чи знали ви, що... ? (beta) -
За останніх 4000 років не була одомашнена жодна нова тварина.
Події
ПнВтСрЧтПтСбНд
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Birthday(s):
AVATARAlex_neo
AVATARWinner
AVATARinvarian
AVATARsvadsak lol

Перегляд теми
ACM Контестер | Технічні Питання | Робота сайту
Автор vector
Witaliy
Користувач

Повідомлень: 282
Зареєстрований: 09.02.08
Опубліковано 29-03-2010 21:00
Як в С++ посортувати вектор і паралельно з ним обмінювати елементи іншого масиву?
Надіслати приватне повідомлення
Автор RE: vector
webmaster
Головний Адміністратор

Аватар користувача

Повідомлень: 1135
Зареєстрований: 17.03.07
Опубліковано 29-03-2010 21:45
написати обєкт-функцію, яку передавати у функцію сортування
хай пояснить той, хто більше знає, бо я давно вже не писав того

я б зробив Клас свій із перевизначеним оператором < і сортував би обєкти цього класу, а вже там всередині того оператора можна зхитрити і сортувати вже те, що тобі потрібно
brus07 brus07 (Lviv NU) http://acm.lviv.ua Надіслати приватне повідомлення
Автор RE: vector
Olecksandr
Модератор

Повідомлень: 151
Звідки: Lviv NU FAMI
Зареєстрований: 30.04.06
Опубліковано 30-03-2010 11:43
Особисто я не знаю такого способу.
В таких випадках роблять структурки, в яких зберігають всі потрібні данні, а оператор порівняння роблять по потрібному ключу.

А ще якщо мені потрібно посортувати два масиви де елементи першого масиву є першим ключем, а елементи другого - другим ключем(тобто порівнюються тоді, коли ключі однакові), або ж просто треба посортувати перший, і попереставляти відповідно елементи другого масиву, то я роблю це наступним чином. Спочатку створюю новий масив і заповнюю його наступним чином ind[i] = i; тоді сортую його елементи, передаючи оператор порівняння, який порівнює елементи масивів. Правда після такого сортування трішки складніше буде доступатись a[ind[i]].

Наприклад.

...
double angle[nmax]
double distance[nmax];

const double eps = 1e-7;

class cmp
{
public:
bool operator()(const int i1, const int i2)
{
if (fabs(angle[i1] - angle[i2]) < eps)
{
return d[i1] > d[i2];
}
return angle[i1] < angle[i2];
}
};

...

sort(indices, indices + n, cmp());
...



sashka 324288154 Olecksandr Voeca [Lviv NU] Надіслати приватне повідомлення
Перейти на форум:
Голосування
Що Ви б хотіли отримати в якості подарунку на змаганні з програмування?

Медалі

настільні ігри

торт

клавіатура, навушники, флешки і т.д.

квитки в кіно

квитки в аквапарк

квитки на пейнтбол

книги

футболки з логотипом змагання

Для участі в голосуваннях Ви повинні залогуватись.
Міні-чат +
Зараз на сайті -
Гостей: 1
На сайті немає зареєстрованних користувачів

Користувачів: 5,089
новачок: redvelvet
Powered by PHP-Fusion © 2003-2006
LNU ACMania © 2004-2011 e-mail: webmaster@acm.lviv.ua
23,443,529 унікальних відвідувачів
Our projects: ACM Contester, _College.
  пїЅпїЅпїЅпїЅпїЅпїЅпїЅ Orphus     bigmir)net TOP 100