0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 40

Слияние двух векторов в третий по условию

15.03.2015, 18:39. Показов 2576. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста как написать сравнение
двух массивов (массив старых и массив новых значений) с записью в третий всех измененных значений - только тех элементов, которых в старом массиве не было, а в новом появились, только тех элементов которые в старом массиве были, а в новом их нет, и элементов, у которых изменилось состояние
массивы имеют вид
std::vector<Class> old;
std::vector<Class> current;
Class содержит поля
dword objectId;
dword objectState;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.03.2015, 18:39
Ответы с готовыми решениями:

Слияние двух векторов
Дано два одномерных массива A и B. Помогите, пожалуйста с кодом: нужно соединить их в один массив C.

Слияние двух стеков в третий
Нужен код вот этой программы : Разработать программу слияния двух стеков, содержащих возрастающую последовательность целых положительных...

Слияние двух отсортированных массивов в третий
Здравствуйте всем! Только начинаю изучать языки программирования. Помогите найти ошибку. Необходимо создать два массива, слить и...

11
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
15.03.2015, 19:22
gutalin, Извольте:
C++
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>
#include <vector>
#include <algorithm>
 
struct Object {
  size_t id;
  size_t state;
};
 
struct LessByAllFields {
  bool operator()(const Object &first, const Object &second) {
    if (first.id == second.id) {
      return first.state < second.state;
    }
    return first.id < second.id;
  }
};
 
struct LessById {
  bool operator()(const Object &first, const Object &second) {
    return first.id < second.id;
  }
};
 
std::ostream &operator<<(std::ostream &out, const Object &obj) {
  return out << "id " << obj.id << " state " << obj.state << ' ';
}
 
std::ostream &operator<<(std::ostream &out,
                         const std::vector<Object> &objects) {
  for (auto object : objects) {
    out << object << ' ';
  }
  return out << '\n';
}
 
template <typename Comp>
std::vector<Object> UniqueInFirst(const std::vector<Object> &first,
                                  const std::vector<Object> &second,
                                  Comp comp) {
  std::vector<Object> unique_in_first;
  std::set_difference(second.begin(), second.end(), first.begin(), first.end(),
                      std::back_inserter(unique_in_first), comp);
  return unique_in_first;
}
 
template <typename Comp>
std::vector<Object> Intersection(const std::vector<Object> &first,
                                 const std::vector<Object> &second, Comp comp) {
  std::vector<Object> unique_in_first;
  std::set_intersection(first.begin(), first.end(), second.begin(),
                        second.end(), std::back_inserter(unique_in_first),
                        comp);
  return unique_in_first;
}
 
int main() {
  std::vector<Object> old = {{0, 0}, {1, 1}, {2, 2}, {3, 3}};
  std::vector<Object> current = {{4, 4}, {0, 0}, {2, 3}, {3, 5}};
 
  std::sort(old.begin(), old.end(), LessByAllFields());
  std::sort(current.begin(), current.end(), LessByAllFields());
 
  std::cout << "Old vector             : " << old;
  std::cout << "Current vector         : " << current;
  std::cout << "Only new elements      : " << UniqueInFirst(old, current,
                                                            LessByAllFields());
  std::cout << "Only old elements      : " << UniqueInFirst(current, old,
                                                            LessByAllFields());
  std::cout << "Same with state changed: \n"
            << "in old: " << Intersection(old, current, LessById())
            << "in new: " << Intersection(current, old, LessById());
}
Пруф работоспособности:
http://ideone.com/D5IHF9
0
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 40
15.03.2015, 20:36  [ТС]
Wow, я конечно догадывалась что у std такой богатый набор решений, но не настолько!

Добавлено через 48 секунд
круто написано, спасибо
0
 Аватар для Kant
37 / 37 / 18
Регистрация: 15.05.2013
Сообщений: 236
15.03.2015, 21:13
Melg,а третий вектор где?
И кажется не правильно

Как отвечать определенному человеку?

C++
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
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
 
using namespace std;
 
struct Object {
    size_t id;
    size_t state;
};
 
bool operator < (const Object& f, const Object& l) {
    if (f.id < l.id && l.state << l.state) return true;
    else return false;
}
 
 
vector<Object> merge(vector<Object>& first, vector<Object>& last);
 
int main() {
    vector<Object> oldv = { {0,1}, {1,2},{3,4} };
    vector<Object> newv = { {0,1}, {1,2},{6,7} };
 
    vector<Object> v3 = merge(oldv, newv);  //  6.7 3.4 
    cout << v3.size() << endl;
 
    for(auto i : v3) cout << i.id << "," << i.state << endl;
 
    return 0;
}
 
 
vector<Object> merge(vector<Object>& first, vector<Object>& last) {
    vector<Object> v3;
 
    set<Object> s1(first.begin(), first.end());
    set<Object> s2(last.begin(), last.end());
 
    set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), back_inserter(v3));
    set_difference(s2.begin(), s2.end(), s1.begin(), s1.end(), back_inserter(v3));
 
    return v3;
}
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
15.03.2015, 22:07
Цитата Сообщение от Kant Посмотреть сообщение
Как отвечать определенному человеку?
Щелкнуть по его нику слева над аватаром и статусом.

Добавлено через 24 минуты
Цитата Сообщение от Kant Посмотреть сообщение
l.state << l.state
Здесь наверное предполагалось что-то другое.
1
 Аватар для Kant
37 / 37 / 18
Регистрация: 15.05.2013
Сообщений: 236
15.03.2015, 23:59
MrGluck, спасибо!

C++
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
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
 
using namespace std;
 
struct Object {
    size_t id;
    size_t state;
};
 
bool operator < (const Object& f, const Object& l) {
    if (f.id < l.id && f.state < l.state) return true;
    else return false;
}
 
 
vector<Object> merge(vector<Object>& first, vector<Object>& last);
 
int main() {
    vector<Object> oldv = { {0,1}, {1,2},{3,4} };
    vector<Object> newv = { {0,1}, {1,2},{6,7} };
 
    vector<Object> v3 = merge(oldv, newv);  //  6.7 3.4
    cout << v3.size() << endl;
 
    for(auto i : v3) cout << i.id << "," << i.state << endl;
 
    return 0;
}
 
 
vector<Object> merge(vector<Object>& first, vector<Object>& last) {
    vector<Object> v3;
 
    set<Object> s1(first.begin(), first.end());
    set<Object> s2(last.begin(), last.end());
 
    set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), back_inserter(v3));
    set_difference(s2.begin(), s2.end(), s1.begin(), s1.end(), back_inserter(v3));
 
    return v3;
}
0
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 40
16.03.2015, 18:54  [ТС]
Отличный способ, правда подходит только для упорядоченных массивов
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
16.03.2015, 18:55
Цитата Сообщение от gutalin Посмотреть сообщение
Отличный способ, правда подходит только для упорядоченных массивов
Определите operator< для Object и вызовите std::sort перед merge.
0
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 40
16.03.2015, 19:30  [ТС]
bool operator < (const Object& f, const Object& l)
пишет - слишком много параметров для этой функции оператора

Добавлено через 3 минуты
точнее
bool Object::operator < (const Object& f, const Object& l)

Добавлено через 4 минуты
Всё, разобралась
0
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 40
22.04.2015, 10:43  [ТС]
а можно ли без сортировки сделать? просто сортировка меняет правильную последовательность объектов местами, это неправильно
0
 Аватар для Kant
37 / 37 / 18
Регистрация: 15.05.2013
Сообщений: 236
22.04.2015, 15:22
gutalin, приведи пример.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
22.04.2015, 15:35
Цитата Сообщение от gutalin Посмотреть сообщение
просто сортировка меняет правильную последовательность объектов местами, это неправильно
Вы наверное имеете в виду устойчивую сортировку. Если брать готовое решение, то это std::stable_sort. std::sort - неустойчивая сортировка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.04.2015, 15:35
Помогаю со студенческими работами здесь

Из двух векторов, создать третий состоящий из повторяющихся чисел находящихся в первых двух.
из двух векторов, создать третий состоящий из повторяющихся чисел находящихся в первых двух то есть если если есть два вектора ...

Слияние двух массивов, заполненных случайными числами, в третий
Доброго времени суток,подскажите,возможно кто то знает как решить задачу ниже..у самого ничего не получается.. Заранее Большое Спасибо! ...

Провести слияние двух массивов по возрастанию, создавая третий массив
Провести слияние двух массивов по возрастанию, создавая третий массив. Помогите пожалуйста:(

Из двух векторов сформировать третий
Люди,помогите!!!У меня не получается=(.. Заранее спасибо!!!!! Составить схему алгоритма и программу записи подряд из массива С...

Выполнить слияние двух рассортированных бинарных файлов в третий упорядоченный файл
Доброго времени суток уважаемые форумчане!!!! У меня есть следующая задача - Выполнить слияние двух рассортированных бинарных файлов в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

Новые блоги и статьи
POCO, ACE, Loki и другие продвинутые C++ библиотеки
NullReferenced 13.05.2025
В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет. . .
Паттерны проектирования GoF на C#
UnmanagedCoder 13.05.2025
Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of. . .
Создаем CLI приложение на Python с Prompt Toolkit
py-thonny 13.05.2025
Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже. . .
Конвейеры ETL с Apache Airflow и Python
AI_Generated 13.05.2025
ETL-конвейеры – это набор процессов, отвечающих за извлечение данных из различных источников (Extract), их преобразование в нужный формат (Transform) и загрузку в целевое хранилище (Load). . . .
Выполнение асинхронных задач в Python с asyncio
py-thonny 12.05.2025
Современный мир программирования похож на оживлённый мегаполис – тысячи процессов одновременно требуют внимания, ресурсов и времени. В этих джунглях операций возникают ситуации, когда программа. . .
Работа с gRPC сервисами на C#
UnmanagedCoder 12.05.2025
gRPC (Google Remote Procedure Call) — открытый высокопроизводительный RPC-фреймворк, изначально разработанный компанией Google. Он отличается от традиционых REST-сервисов как минимум тем, что. . .
CQRS (Command Query Responsibility Segregation) на Java
Javaican 12.05.2025
CQRS — Command Query Responsibility Segregation, или разделение ответственности команд и запросов. Суть этого архитектурного паттерна проста: операции чтения данных (запросы) отделяются от операций. . .
Шаблоны и приёмы реализации DDD на C#
stackOverflow 12.05.2025
Когда я впервые погрузился в мир Domain-Driven Design, мне показалось, что это очередная модная методология, которая скоро канет в лету. Однако годы практики убедили меня в обратном. DDD — не просто. . .
Исследование рантаймов контейнеров Docker, containerd и rkt
Mr. Docker 11.05.2025
Когда мы говорим о контейнерных рантаймах, мы обсуждаем программные компоненты, отвечающие за исполнение контейнеризованных приложений. Это тот слой, который берет образ контейнера и превращает его в. . .
Micronaut и GraalVM - будущее микросервисов на Java?
Javaican 11.05.2025
Облачные вычисления безжалостно обнажили ахиллесову пяту Java — прожорливость к ресурсам и медлительный старт приложений. Традиционные фреймворки, годами радовавшие корпоративных разработчиков своей. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru