С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/501: Рейтинг темы: голосов - 501, средняя оценка - 4.98
19 / 11 / 0
Регистрация: 02.09.2010
Сообщений: 235

Как проверить содержит ли вектор элемент?

28.02.2011, 15:56. Показов 98540. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть заполненный вектор:
C++
1
std::vector<std::string> us;
Как наиболее быстро определить, есть ли в нём определенный элемент?
Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.02.2011, 15:56
Ответы с готовыми решениями:

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

Массив: Найти максимальный по модулю элемент, а строку, которая содержит этот элемент, переслать в вектор
Создать двумерный массив i=3,j=4 формула вычисления элементов a=(sqr(i)*i)+4*(sqr(j)-15 Найти максимальный по модулю элемент...

В матрице размером NxM поменять местами строку, которая содержит элемент с наибольшим значением со строкой, которая содержит элемент с наименьшим
В матрице размером NxM поменять местами строку, которая содержит элемент с наибольшим значением со строкой, которая содержит элемент с...

9
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
28.02.2011, 17:17
Если данные упорядочены - бинарный поиск, иначе - линейный.
1
19 / 11 / 0
Регистрация: 02.09.2010
Сообщений: 235
28.02.2011, 19:03  [ТС]
Вот написал для вектора int'ов, но не работает

C++
1
2
3
4
5
6
7
8
9
10
11
std::vector<int> vector1;
std::vector<int>::iterator it = vector1.begin();
 
while(it != vector1.end()) {
     if (vector1.it == 102) {
            printf("Вектор содержет 102");
            break;
     }
     it++;
}
if(it == vector1.end()) printf("Вектор не содержет 102");
Подправьте синтаксис пожалуйста на строке 5
И это, я так понимаю, будет самый быстрый поиск для обыкновенного вектора?
0
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
28.02.2011, 19:06
Damaks, Если уже юзаете вектора, то будет логично использовать и конкретные алгоритмы(STL). Для вашего случая:
Цитата Сообщение от silent_1991 Посмотреть сообщение
бинарный поиск
http://www.cppreference.com/wi... ary_search
Цитата Сообщение от silent_1991 Посмотреть сообщение
линейный
http://www.cppreference.com/wi... thm/search
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
28.02.2011, 19:30
Цитата Сообщение от Damaks Посмотреть сообщение
Вот написал для вектора int'ов, но не работает
C++
1
std::cout << ( std::find(vector1.begin(), vector1.end(), 13) == vector1.end() ? "нету " : "есть " ) << 13 << " в массиве." << std::endl;
1
19 / 11 / 0
Регистрация: 02.09.2010
Сообщений: 235
28.02.2011, 19:34  [ТС]
find, это который в algorithm? У меня он работает недопустимо медленно. Сейчас попробуй совет asics.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.02.2011, 20:48
Damaks, find не может работать недопустимо медленно. Скорость зависит от кол-ва элементов в нем.
std::search для одного элемента не покатит.
Если find слишком медленно - либо пересмотрите используемый контейнер, либо binary_search после сортировки.
0
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
01.03.2011, 23:35
Насколько я знаю
find - ищет определенное значение и возвращает итератор
binary_search - ищет диапазон значений по отсортированному вектору и возвращает bool значение (есть/нету)
search - ищет диапазон значений по вектору и возвращает bool значение.
По скорости получается сначала binary_search, потом find, потом search, но для поиска одного числа быстрее find, я прав?
0
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
01.03.2011, 23:40
Цитата Сообщение от Union Посмотреть сообщение
Видимо find работает только со строками, а search с числами
Да нет, должно работать без проблем, пробуй так
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <vector>
#include <algorithm>
 
int main(){
  std::vector<int> a = {7, 3, 8, 6};
  std::cout << *std::find(a.begin(), a.end(), 3);
  return 0;
}
(Если у тебя не GCC4.5+ или MSVS10, заполни вектор по-другому)
1
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
02.03.2011, 00:06
Да, уже понял что ошибся
А про скорость ничего не скажете, что лучше для поиска по вектору int'ов?
Я вот сейчас замерил скорость find, а в search походу если одно число искать, а не диапазон, то мне надо задать его дважды, т.к. там можно задать только диапазон, правильно я мыслю? Или search предназначен только для поиска диапазона, и для поиска определенного числа его использовать неправильно?

Добавлено через 20 минут
Попробовал задать начальное и конечное значение одним числом, не вышло. Оказалось что разница между binary_search и search больше чем возможность поиска по несортированному вектору. binary_search ищет определенное число (у меня получилось его запустить), в то время как search диапазон, который нельзя задать одним числом, или у меня просто не получилось
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.03.2011, 00:06
Помогаю со студенческими работами здесь

Как создать вектор, который содержит классы?
Нужно что-то подобное (пример на c++): vector &lt;MyStruct&gt; v; //Вектор v содержит структуры типа MyStruct MyStruct Student; ...

Сформировать вектор B=(b1,b2,…bm), каждый элемент которого определяется как минимальный элемент соответствующего столбца исходной матрицы A(n,m)
Сформировать вектор B=(b1,b2,…bm), каждый элемент которого определяется как минимальный элемент соответствующего столбца исходной матрицы...

Как проверить, содержит ли the_content(); определенное слово
Привет пытаюсь выявлять слово в Титле что бы оперировать словами в шаблоне для Сео Делаю вот так &lt;?php $a = the_title(); ...

Как проверить содержит ли строка русские символы ?
Помогите плз. Нужно проверять содержит ли строка введенная пользователем русские символы или нет ? У меня существуют кое-какие задумки,...

Как проверить, что переменная содержит не число?
if (($NumberData+1)==($NumberData-1)) не помогает.


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru