Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908

Найти все записи вектора А присутствующие в векторе В

10.05.2023, 08:21. Показов 2141. Ответов 56
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здрасте!
Задачка следующая.
Есть 2 вектора А и В.
Вектор А получен чтением из файла.
Вектор В получен рекурсивным сканированием дериктории
Необходимо создать вектора С, в котором будет:
все записи из вектора А за исключением отсутствующих в векторе В,
а так же отсутствующих в векторе А, но присутствующих в векторе В.
Содержимое векторов примерно следующее:
Кликните здесь для просмотра всего текста
product/app 0 0 0755
product/app/Aperture 0 0 0755
product/app/Aperture/Aperture.apk 0 0 0644
product/app/Aperture/oat 0 0 0755
product/app/Aperture/oat/arm64 0 0 0755
product/app/Aperture/oat/arm64/Aperture.odex 0 0 0644
product/app/Aperture/oat/arm64/Aperture.vdex 0 0 0644
product/app/Backgrounds 0 0 0755
product/app/Backgrounds/Backgrounds.apk 0 0 0644
product/app/DeskClock 0 0 0755
product/app/DeskClock/DeskClock.apk 0 0 0644
product/app/DeskClock/oat 0 0 0755
product/app/DeskClock/oat/arm64 0 0 0755
product/app/DeskClock/oat/arm64/DeskClock.odex 0 0 0644
product/app/DeskClock/oat/arm64/DeskClock.vdex 0 0 0644
product/app/Etar 0 0 0755
product/app/Etar/Etar.apk 0 0 0644
product/app/Etar/oat 0 0 0755
product/app/Etar/oat/arm64 0 0 0755
product/app/Etar/oat/arm64/Etar.odex 0 0 0644
product/app/Etar/oat/arm64/Etar.vdex 0 0 0644
product/app/ExactCalculator 0 0 0755
product/app/ExactCalculator/ExactCalculator.apk 0 0 0644
product/app/ExactCalculator/oat 0 0 0755
product/app/ExactCalculator/oat/arm64 0 0 0755
product/app/ExactCalculator/oat/arm64/ExactCalculator.odex 0 0 0644
product/app/ExactCalculator/oat/arm64/ExactCalculator.vdex 0 0 0644
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.05.2023, 08:21
Ответы с готовыми решениями:

В векторе. Найти наименьший четный элемент вектора и поменять с первым элементом
Добрый день! Столкнулся с трудностями при решении задачи - Найти наименьший четный элемент вектора и поменять с первым элементом. Var ...

Если в векторе А минимальный положительный элемент встретился один раз, то заменить все большие его элементы вектора на
произведение индексов максимального положительного и отрицательного элементов. Сделать на VBA

Найти все палиндромы, размером меньше числа n в векторе
Решаю задачу по нахождению всех палиндромов из вектора которые длиной не больше n. Я написал следующую программу: #include...

56
фрилансер
 Аватар для Алексей1153
6509 / 5764 / 1135
Регистрация: 11.10.2019
Сообщений: 15,415
11.05.2023, 17:00
Студворк — интернет-сервис помощи студентам
blackeangel, значит, разбирайся с чтением путей в отладчике. С тестовым набором работает
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
11.05.2023, 17:09  [ТС]
Алексей1153, с путями всё хорошо. Вопрос: сейчас что пытались сделать? Всё ТЗ или только разность?
0
фрилансер
 Аватар для Алексей1153
6509 / 5764 / 1135
Регистрация: 11.10.2019
Сообщений: 15,415
11.05.2023, 17:34
вот это делал, тестировал тестовым набором
Цитата Сообщение от blackeangel Посмотреть сообщение
Есть 2 вектора А и В.
Вектор А получен чтением из файла.
Вектор В получен рекурсивным сканированием дериктории
Необходимо создать вектора С, в котором будет:
все записи из вектора А за исключением отсутствующих в векторе В,
а так же отсутствующих в векторе А, но присутствующих в векторе В.
Добавлено через 50 секунд
blackeangel, скинь сюда два набора строк, полученных в твоих векторах. Я с ними попробую
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
11.05.2023, 19:39  [ТС]
Алексей1153, А это тот самый файл. В и В1 файлы, полученные после рекурсией папки, для примера.
Т.к. А-В=0, то должно получиться С=А+В, а не С=0.
Вложения
Тип файла: zip system.zip (49.3 Кб, 7 просмотров)
0
фрилансер
 Аватар для Алексей1153
6509 / 5764 / 1135
Регистрация: 11.10.2019
Сообщений: 15,415
11.05.2023, 20:03
Цитата Сообщение от Алексей1153 Посмотреть сообщение
все записи из вектора А за исключением отсутствующих в векторе В,
а так же отсутствующих в векторе А, но присутствующих в векторе В.
такс, это же у нас такая функция:
A and !B or !A and B

а это исключающее или, то есть xor , std::set_difference

Добавлено через 1 минуту
то есть, такие записи, которые есть лишь в одном списке
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
11.05.2023, 20:21  [ТС]
Алексей1153, видимо запутались.
Итак, сначала ИЗ вектора А удалим те записи, которые есть в А, но их нет в В.
Вторым действием в А добавим записи, которые ЕСТЬ в В, но их нет в А.
Это и будет результирующий вектор С.
0
фрилансер
 Аватар для Алексей1153
6509 / 5764 / 1135
Регистрация: 11.10.2019
Сообщений: 15,415
11.05.2023, 20:28
blackeangel, тогда остаётся std::set_symmetric_difference

в общем, программа рабочая, нужно только правильную функцию-алгоритм подобрать
1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
11.05.2023, 21:07
blackeangel
Только мне кажется что программирование не твое.
Не могу не вспомнить пословицу : "не можешь срать - не мучай жопу".
Хотя если цель таки посрать. то ваши темы приобретают смысл и запах.
Если я неправ, пускай, перед чисткой - удалением моего сообщения,
те кто пытались помочь ТС, приведут какието аргументы, что у ТС есть хоть какие то задатки к данному ремеслу.
Ибо у меня сомнений нет.
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
11.05.2023, 21:21  [ТС]
SmallEvil, ну я ж этим хлеб не зарабатываю, как некоторые, посему мне простительно это. Хотя за 8 лет, ковыряния языков это 5й (vba, python, C#, java). Да, пускай поверхностно, но решать свои задачки хватает. Что то серьезное кодить или становиться программистом - такова задача не стоит.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
11.05.2023, 21:29
Цитата Сообщение от blackeangel Посмотреть сообщение
Да, пускай поверхностно, но решать свои задачки хватает
Ну у вас же проблема не с ЯП.
А в правильной постановке/выборе вопросов. Что является следствием способности анализа.
На что влияют врожденные способности, накопленные знания+опыт (что одно и тоже, но я спец. их упомянул отдельно) и мотивация.
Я вот не пытаюсь вас обидеть.
Просто вместо создания этих бесполезных для вас тем, может все же обдумаете о том как повысить ваш уровень анализа либо потратить свое время (которое у всех драгоценное) на что то более стоящее ?
На этом прошу откланяться.
1
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
11.05.2023, 23:14  [ТС]
Алексей1153, по вашему совету заменил на std::set_symmetric_difference, казалось бы, что верно работает, но после нескольких тестов результат оказался грустным, да ещё и правая часть из В теряется. В общем, забейте - сделаю переборами, и ничего не потеряется и мне понятно, и дебагить просто.

Добавлено через 3 минуты
Алексей1153, всё равно спасибо за попытки помочь
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
12.05.2023, 06:29  [ТС]
Пардон, правая часть на Месте, вчера не заметил
0
фрилансер
 Аватар для Алексей1153
6509 / 5764 / 1135
Регистрация: 11.10.2019
Сообщений: 15,415
12.05.2023, 08:14
blackeangel, таки std::set_symmetric_difference оказалось верным?

Добавлено через 1 минуту
Цитата Сообщение от Алексей1153 Посмотреть сообщение
а это исключающее или, то есть xor , std::set_difference
кстати, я вот тут неправильно сказал. std::set_difference - это разница между первым и вторым, а XOR это как раз именно std::set_symmetric_difference.
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
12.05.2023, 08:33  [ТС]
Алексей1153, нет, не верным. Понял, что за один проход это не выполнить. std::set_symmetric_difference докидывает недостающее, но не исключает отсутствующее.
0
фрилансер
 Аватар для Алексей1153
6509 / 5764 / 1135
Регистрация: 11.10.2019
Сообщений: 15,415
12.05.2023, 08:36
blackeangel,

A
"111"
"222"
"333"
"555"


B
"111"
"444"
"777"
"555"

что должно получиться в C ? Вручную, скорее всего, не нужно, максимум два алгоритма друг за другом запустить

Добавлено через 20 секунд
но можно и вручную, если так проще кажется
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
12.05.2023, 09:13  [ТС]
Алексей1153,
С
"1111" из А
"4444" из В
"7777" из В
"5555" из А


Скорее всего 2 алгоритма.
Руками вот как это
Кликните здесь для просмотра всего текста
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
int main(int argc, char *argv[])
{
    std::filesystem::path fsconfig = "/data/local/UnpackerSystem/config/system/system_fs_config";
    std::filesystem::path foldername = "/data/local/UnpackerSystem/system";
    std::vector<std::string> fs_config = readlines(fsconfig);
    std::vector<std::string> folder_name = recursive_dir(foldername);
    
    std::vector<std::string> C; //вектор для работы
    //выкидываем лишнее
    for (const auto &p : fs_config)
    {
        std::vector<std::string> tmp1 = split(p, ' ');
        std::string a0 = tmp1[0];
        for (const auto &m : folder_name)
        {
            std::vector<std::string> tmp2 = split(m, ' ');
            std::string b0 = tmp2[0];
            if (a0 == b0)
            {
                C.push_back(p);
                break;
            }
        }
    }
    //закидываем не достающее
    for (const auto &p : folder_name)
    {
        std::vector<std::string> tmp1 = split(p, ' ');
        std::string a0 = tmp1[0];
        bool finding = true;
        for (const auto &m : C)
        {
            std::vector<std::string> tmp2 = split(m, ' ');
            std::string b0 = tmp2[0];
            if (a0 == b0)
            {
                finding = false;
                break;
            }
        }
        if (finding)
        {
            C.push_back(p);
        }
        
    }
    //выводим результат
    std::ofstream ofs("/data/local/UnpackerSystem/config/system/C.txt");
    for (const auto &e : C)
    {
        ofs << e << "\n";
    }
    return 0;
}

Результат нужный , но оооочень медленный....

Добавлено через 1 минуту
И сортировать не нужно, иначе потом работать с этими отсортироваными данными нереально
0
фрилансер
 Аватар для Алексей1153
6509 / 5764 / 1135
Регистрация: 11.10.2019
Сообщений: 15,415
12.05.2023, 09:21
вот так ?
A and B or !A and B
если упростить, то
(A or !A) and B
или
B

в итоге - это просто содержимое B

но, я так понимаю, соль тут в хвостиках.
Поэтому, решение видится такое:

копируем B в C полностью
затем бежим по всем элементам C, ищем такой элемент в A и, если находим, копируем элемент из A в C на место сравниваемого элемента
1
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
12.05.2023, 10:26  [ТС]
Алексей1153, кстати, да, об этом (чтобы за основу взять В) я как то не подумал. Зациклился на А.

Добавлено через 49 минут
Всё равно медленно получается, около 60 сек 2 вектора по 4к. Это ж на сколько долго будет на 150к+....
Кликните здесь для просмотра всего текста
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
int main(int argc, char *argv[])
{
    std::filesystem::path fsconfig = "/data/local/UnpackerSystem/config/system/system_fs_config";
    std::filesystem::path foldername = "/data/local/UnpackerSystem/system";
    std::vector<std::string> fs_config = readlines(fsconfig);
    std::vector<std::string> folder_name = recursive_dir(foldername);
 
    std::vector<std::string> C = folder_name; //вектор для работы
 
    for (auto &p : C)
    {
        std::vector<std::string> tmp1 = split(p, ' ');
        std::string a0 = tmp1[0];
        for (const auto &m : fs_config)
        {
            std::vector<std::string> tmp2 = split(m, ' ');
            std::string b0 = tmp2[0];
            if (a0 == b0)
            {
                p=m;
                break;
            }
        }
    }
    std::sort(C.begin(),C.end());
    //выводим результат
    std::ofstream ofs("/data/local/UnpackerSystem/config/system/C.txt");
    for (const auto &e : C)
    {
        ofs << e << "\n";
    }
    return 0;
}
0
фрилансер
 Аватар для Алексей1153
6509 / 5764 / 1135
Регистрация: 11.10.2019
Сообщений: 15,415
12.05.2023, 10:57
blackeangel, искать то можно в сортированном, это будет быстрее. Если будет время, попробую

Добавлено через 24 минуты
blackeangel, вообще, сортировать для скорости поиска нам надо только A, и обратно его порядок восстанавливать ведь не требуется? Но можно и восстановить, если нужно. Щас попробую "полный вариант", а потом подрежем лишнее

Добавлено через 2 минуты
blackeangel, и ещё момент - если записи повторные (и в A, и в B) - что делать? Или повторные выкинуть?
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
12.05.2023, 11:19  [ТС]
Алексей1153, нет, не требуется.
А повторные записи это как?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.05.2023, 11:19

В векторе-столбце произвольной длины найти все отрицательные/положительные элементы
Здравствуйте подскажите как выполнить это в маткаде. в векторе-столбце произвольной длины позволяет найти все отрицательные/положительные...

Найти и вывести все числа, которые присутствуют в векторе более одного раза
// 2) a = // Найти и вывести все числа, которые присутствуют в списке более одного раза. пытался вот как то так) // 2) a = //...

Как увидеть все переменные присутствующие в скрипте?
Добрых суток! Возник вопрос. Как можно (если есть такие возможности) увидеть все переменные скрипта? Например получаю из массива ряд...

Вывести все различные буквы, присутствующие во введенной строке
Нужно чтобы мы вводили с клавиатуры строку(например: hello lena) и нам в результате выводило все различные буквы, тогда должно вывести h e...

Выбрать все элементы массива A, присутствующие в массиве B один раз
Даны два одномерных массива целых чисел A и В. Вычислить одномерный массив С, который содержит все элементы массива A, присутствующие в...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru