Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > stl vector (объединение, пересечение и т.п.)


Автор: becks 25.7.2011, 16:43
Добрый день, коллеги. Вопрос такой , есть два вектора такого вида:
Код

    vector< pair<int, int> > SUBR;    
    vector< pair<int, int> > OBJR;


Мне необходимо сравнить массивы second (массивы вторых элементов пары) этих векторов между собой. Допустим со всеми second из SUBR, такими, что их нет в second OBJR, делать операцию№1. С общими (одинаковыми) second из SUBR и OBJR делать операцию№2. И с second из  OBJR ,которые не встречаются в SUBR делать операцию №3.

Собственно работа со множествами получается, подскажите какие есть подходящие алгоритмы?
Заранее благодарен.

Автор: mes 25.7.2011, 17:10
сравнивать элементы с одинаковым порядковым номером, или со всем рядом ? если второе массивы сортированы или нет ? 
ограничены ли старым стандартом ?

вообщем слишком обще написано, что не дает представлений о том, какое решение подойдет.. вот этот алгоритм может пригодиться :
http://cplusplus.com/reference/algorithm/set_difference/

Автор: Earnest 25.7.2011, 17:22
Цитата(becks @  25.7.2011,  17:43 Найти цитируемый пост)
Собственно работа со множествами получается, подскажите какие есть подходящие алгоритмы?

Раз работа с множеством, то проще всего и сделать множество: отсортировать вектора по второму полю, а затем ищи подходящую операцию в stl: set_intersection, set_difference и т.д.
Если массивы не слишком велики, проще, как мне кажется, сделать нужную выборку во временный массив и с ней проделать необходимые операции.

Автор: becks 25.7.2011, 17:52
Цитата

сравнивать элементы с одинаковым порядковым номером, или со всем рядом ?

Сравнивать со всем рядом.

Цитата

если второе массивы сортированы или нет ?


Массивы не отсортированы.

ограничены ли старым стандартом ?
Цитата

Нет. Не ограничен.


Хотелось бы еще добавить массивы небольшой размерности size = 30 +/- 20 .  Но задача такая, что операцию придется выполнять довольно часто, хотелось бы реализовать более менее разумным образом это дело. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)