Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/64: Рейтинг темы: голосов - 64, средняя оценка - 4.92
9 / 9 / 0
Регистрация: 22.12.2017
Сообщений: 295

Сравнить два вектора

02.01.2020, 14:28. Показов 12757. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Существует ли способ сравнить два вектора следующим образом:
Даны два строковых вектора, допустим
v1 = {"1","2","3","4","5","6"}
v2 = {"1","5","6"}
Необходимо узнать принадлежат ли элементы вектора v2 вектору v1 полностью?
Т.е. результат истина тогда, если все элементы вектора v2 содержатся в векторе v1,
и ложь, если не содержатся или содержатся частично.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.01.2020, 14:28
Ответы с готовыми решениями:

Сравнить два вектора размерности n
Как сравнить два вектора размерности n? Например вектор a(2,3,2) сравнить с вектором b(1,3,3). Какой из векторов больше? Вообще можно ли их...

Сравнить два вектора по длине
Заданы два вектора a ={ a 1 , a 2 , …, a n } и b ={ b 1 , b 2 , …, b n }. Определить тот из них, который имеет наименьшую длину.

Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые элементы этого вектора
Дано вектор В, состоящий из N действительных чисел. Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые...

11
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.01.2020, 14:33
Encrypted1010, элементы в векторе V2 могут повторяться?
0
9 / 9 / 0
Регистрация: 22.12.2017
Сообщений: 295
02.01.2020, 14:40  [ТС]
IGPIGP, да могут
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
02.01.2020, 14:45
Encrypted1010, https://en.cppreference.com/w/... m/includes

Добавлено через 1 минуту
Цитата Сообщение от Encrypted1010 Посмотреть сообщение
да могут
пардон, тогда не подойдет
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.01.2020, 14:47
Цитата Сообщение от Encrypted1010 Посмотреть сообщение
IGPIGP, да могут
В этом случае равенство массивов предполагает равенство количества вхождений? То есть если элемент со значением 123 входит в V2 трижды, то значит ли это, что для равенства он должен входить в V1 трижды?
0
9 / 9 / 0
Регистрация: 22.12.2017
Сообщений: 295
02.01.2020, 14:54  [ТС]
IGPIGP, один элемент может входить хоть 100 раз, не принципиально, главное чтобы повторяющиеся элементы вектора v2 присутствовали в векторе v1 хотя бы один раз.

Добавлено через 46 секунд
PS Предполагается, что в векторе v1 элементы повторяться не будут.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
02.01.2020, 14:56
Цитата Сообщение от Encrypted1010 Посмотреть сообщение
один элемент может входить хоть 100 раз, не принципиально, главное чтобы повторяющиеся элементы вектора v2 присутствовали в векторе v1 хотя бы один раз.
тогда сначала https://en.cppreference.com/w/cpp/algorithm/unique
а потом уже includes
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.01.2020, 15:01
Цитата Сообщение от Encrypted1010 Посмотреть сообщение
Предполагается, что в векторе v1 элементы повторяться не будут.
Если не использовать множество вместо V1 то я бы
-сортировал вектор V2.
-проходя по V1 последовательно искал бы бинарным lower_bound в V2
Если всё нашли - ok.
Хотя если сортировать и V1 то можно сузить диапазон поиска по lower_bound используя уже полученный итератор предыдущего, успешного поиска. Любой не успешный - не ok)
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
02.01.2020, 17:02
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
#include <iostream>
#include <vector>
#include <string>
 
template<typename T>
bool foo(const std::vector<T> v1, const std::vector<T> v2)
{
    bool result = false;
    for (size_t i = 0; i < v2.size(); i++)
    {
        result = false;
        for (size_t j = 0; j < v1.size(); j++)
        {
            if (v1[j] == v2[i])
            {
                result = true;
                break;
            }
        }
        if (!result)
        {
            return result;
        }
    }
    return result;
}
 
int main()
{
    std::vector<std::string> v1, v2;
    v1 = { "3","2","1","0" };
    v2 = { "3", "3", "3", "2", "0" };
    return foo(v1, v2);
}
(Вроде для std::string определён оператор ==)
Это если на оптимизацию насрать
1
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
03.01.2020, 05:39
Лучший ответ Сообщение было отмечено Encrypted1010 как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
typedef std::vector<std::string> strvec;
 
bool includes(const strvec& v1, const strvec& v2)
{   
    std::multiset<std::string> s(v1.begin(), v1.end());
    s.insert(v2.begin(), v2.end());
    for (const auto& elem : v2)
    {
        if (s.count(elem) == 1) return false;
    }
    return true;
}
1
9 / 9 / 0
Регистрация: 22.12.2017
Сообщений: 295
03.01.2020, 06:23  [ТС]
fao, спасибо
0
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
03.01.2020, 14:21
Encrypted1010, увидел эту часть Вашего поста только у себя на почте. У меня на страничке ее нет.
"...можете показать как это будет работать на практике с двумя векторами? Допустим, работа вектора осуществляется в точке входа int main()."

Код с правкой, чтобы учесть возможность повторений внутри вектора v2 (тоже, кстати, не сразу заметил, т.к. отсутствуют части обсуждения)

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
#include <iostream>
#include <vector>
#include <string>
#include <set>
 
typedef std::vector<std::string> strvec;
 
bool includes(const strvec& v1, const strvec& v2)
{   
    std::multiset<std::string> s(v1.begin(), v1.end()); 
    for (const auto& elem : v2)
    {
        if (s.count(elem) == 0) return false;
    }
    return true;
}
 
int main()
{
    strvec v1, v2;
    v1 = {"5", "2", "1", "0", "8", "6", "9" };
    v2 = { "5", "5", "8", "0", "2" };
    
    std::cout << includes(v1, v2);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.01.2020, 14:21
Помогаю со студенческими работами здесь

Сравнить члены вектора
Как сравнивать члены вектора между собой? Например дан вектор: 000101010 Надо сравнить тройками чисел,т.е. 1-я тройка: 000 -&gt;три 0...

Как сравнить соседние элементы вектора?
Здравствуйте, начал проходить тему векторы и появился вопрос. По заданию мне нужно найти в контейнере минимальный элемент с помощью индекса...

Как сравнить элемент вектора и переменную типа wchar_t?
Имеется vector&lt;wstring&gt; a; и переменная wchar_t *sss; также создан итератор вектора. Вопрос: как сравнить элемент вектора и переменную...

Как сравнить некоторый объект вектора тип данных которого является структурой ?
Сама структура struct coordinate { int h; int w; }; Вектор этой структуры vector &lt;coordinate&gt; poi; Некоторое...

Сортировка вектора с демонстрационной диаграммой. Сравнить различные алгоритмы сортировок по количеству операций.
Сортировка вектора.


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru