С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
7 / 7 / 0
Регистрация: 14.05.2015
Сообщений: 145
1

Поиск нескольких элементов массива/вектора

02.09.2015, 01:16. Показов 3246. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток. После нескольких часов безуспешного мозгового штурма и интернет-серфинга решил задать вопрос здесь. Попытаюсь ясно сформулировать.

У меня есть несколько переменных. Пусть это буду x,y,z. Есть несколько массивов A[], B[], C[]. В этих массивах различные переменные, но среди них есть те самые x y z. Только в одном массиве, например, есть только x, в другом только y. Мне надо найти тот массив, в котором встречаются все 3 переменные.

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

P.S. У меня есть предположение одно. Перебрать все элементы массива, и если какой-то из элементов равен x, то перебрать все элементы заново и найти y. Так же z. Но это слишком уж "колхозно". У меня этих массивов может быть много. И придется все перебирать, да еще и по несколько раз. Слишком затратно
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.09.2015, 01:16
Ответы с готовыми решениями:

Поиск среди пар элементов вектора
В заданном векторе провести поиск среди пар его элементов и найти те пары, разность между...

Вывести индексы нескольких элементов массива
В массиве найти максимальный по значению элемент, вывести его индекс, если таких элементов...

Найти сколько элементов первого вектора совпадают с элементами второго вектора
#include <iostream> #include <time.h> #include <vector> #include <set> using namespace std; ...

Создание массива и поиск равных среднему арифметическому элементов массива
Создать массив (пусть это будет целочисленный массив), состоящий из 100 элементов. Считать...

7
8 / 8 / 6
Регистрация: 31.07.2015
Сообщений: 39
02.09.2015, 01:42 2
как вариант ищи сразу все три элемента в одном массиве, чтоб заново не перебирать.
навскидку: создать 3 флага, они будут соответствовать совпадению для каждого элемента, если все три флага тру, значит это твой нужный массив.
0
7 / 7 / 0
Регистрация: 14.05.2015
Сообщений: 145
02.09.2015, 01:48  [ТС] 3
Monty_Python, про флаги и не подумал. Спасибо!) Работа по поиску элементов в одном массиве упростилась) А вот что с поиском по всем массивам. Мне все-таки придется их все перебирать на наличие той или иной переменной?

P.S. Просто это я вопрос задал для понимания вообще - как можно организовать поиск по массивам. Но на будущее я хочу уже сделать оконное приложение, в котором будут поля для нескольких переменных, и я не знаю сколько изначально пользователь их задаст. Как сделать флаги, не зная изначально сколько их?
0
8 / 8 / 6
Регистрация: 31.07.2015
Сообщений: 39
02.09.2015, 01:58 4
Цитата Сообщение от Tilesto Посмотреть сообщение
А вот что с поиском по всем массивам. Мне все-таки придется их все перебирать на наличие той или иной переменной?
Два условия выхода из цикла по переборам массивов:
1. Делается break как только найден нужный массив.
2. Перебираются все массивы.
Цитата Сообщение от Tilesto Посмотреть сообщение
Как сделать флаги, не зная изначально сколько их
Зависит от алгоритма и этапа когда будет определено необходимое количество элементов которые нужно найти. Можно вначале создать вектор, а затем когда узнаем количество то проинициализировать его нулями. Когда необходимый элемент найден то вместо нуля записываем единицу (поднимаем флаг), если в векторе все элементы равны единицам, то значит мы нашли наш массив, а если нет, то заново инициализируем его нулями и проверяем на соответствия в следующем массиве.
0
7 / 7 / 0
Регистрация: 14.05.2015
Сообщений: 145
02.09.2015, 02:01  [ТС] 5
Monty_Python, и почему этому не учат в универе) Спасибо большое)
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,241
02.09.2015, 10:06 6
Цитата Сообщение от Tilesto Посмотреть сообщение
Но это слишком уж "колхозно".
используйте для отсортированных данных алгоритм:
http://www.cplusplus.com/refer... /includes/
0
9 / 9 / 3
Регистрация: 02.03.2013
Сообщений: 53
03.09.2015, 13:47 7
вот примитивная проверка
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
#include <iostream>
 
void main()
{
    int x, y, z;
    int A[20] = {1,2,3,4,5,6,7,8,9,10};
    int B[20] = {11,12,13,14,15,16,17,18,19,20};
    int C[20] = {11,12,13,14,15,16,17,18,19,20};
    std::cout << "Input X Y Z";
    std::cin >> x >> y >> z;
    for (int i = 0; i < 20; i++)
    {
        for (int j = 0; j < 20; j++)
        {
            for (int k = 0; k < 20; k++)
            {
                if((A[i]==x && A[j] == y && A[k] == z))
                {
                    std::cout << "In Mass A find x and y and z"<< std::endl;
                }
                if ((B[i] == x && B[j] == y && B[k] == z))
                {
                    std::cout << "In Mass B find x and y and z" << std::endl;
                }
                if ((C[i] == x && C[j] == y && C[k] == z))
                {
                    std::cout << "In Mass B find x and y and z" << std::endl;
                }
            }
        }
    }
    system("pause");
}
0
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.09.2015, 17:32 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <vector>
#include <algorithm>
 
int main()
{
   std::vector<int> v1{1,2,3,4,5,6,7};
   std::vector<int> v2{1,2,3,4,0,6,7};
   std::vector<int> v3{2,5,7};
   std::cout << std::boolalpha;
   std::cout << std::includes(v1.begin(), v1.end(),
                              v3.begin(), v3.end()) << std::endl;
   std::cout << std::includes(v2.begin(), v2.end(),
                              v3.begin(), v3.end()) << std::endl;
}
Добавлено через 2 часа 34 минуты
Еще такой вариант для ассоциативных контейнеров. Но это для любителя С++11.
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
#include <iostream>
#include <string>
#include <set>
#include <map>
#include <type_traits>
#include <initializer_list>
 
template <template<typename...> class Cont, typename... TArgs, typename... Args>
bool find_elems(const Cont<TArgs...> &cont, const Args &... args)
{
   using key_type = typename std::remove_reference<decltype(cont)>::type::key_type;
   using key_compare = typename std::remove_reference<decltype(cont)>::type::key_compare;
 
   std::multiset<key_type, key_compare> v = {args...};
   for(const auto &key : v)
      if (cont.find(key) == cont.end())  return false;
   return true;
}
 
int main()
{
   std::set<int> s{1,2,3,4,5,6,7};
   std::map<std::string, int> m{{"hello", 1}, {"abc", 2}, {"abra", 5}, {"world", 4}};
 
   std::cout << std::boolalpha;
   std::cout << find_elems(s, 3,2,7,1) << std::endl;
   std::cout << find_elems(s, 0,3,2,7,0,1) << std::endl;
 
   std::cout << find_elems(m, "hello", "world") << std::endl;
   std::cout << find_elems(m, "hello", "world", "wrong") << std::endl;
}
1
03.09.2015, 17:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.09.2015, 17:32
Помогаю со студенческими работами здесь

Определить количество положительных элементов вектора С(10) и заменить этим значением минимальный элемент вектора А(5)
Ребята помогите пожалуйста с задачкой. Я сам не шарю в C++, но в этом семестре появился этот...

Поиск суммы элементов массива и количества положительных элементов в нем
как разработать функцию , которая определяет суммы первой и второй половины динамического массива и...

Среди элементов массива Z (m) найти k (k << m) крупнейших. Поиск осуществить за один проход (просмотр) массива Z
Среди элементов массива Z (m) найти k (k &lt;&lt; m) крупнейших. Поиск осуществить за один проход...

Заданный вектор А, состоящий из n элементов. Переставить компоненты вектора, размещенные после самого элемента вектора А
Заданный вектор А, состоящий из n элементов. Переставить компоненты вектора, размещенные после...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru