C vector найти элемент
Работа со строками. Вывод искомого слова
Программа находит в тексте слово red. вот текст файла: red bred brred bread skinred.
Вернуть индекс последнего с конца элемента E в векторе V
подскажите нужно сделать следующие ------find_last(v, e) - вернуть индекс элемента e в векторе v.
Найти индекс начала слова максимальной длины
Здравствуйте. Дано символьный массив L(20), нужно найти индекс начала слова максимальной длины. .
Cделать ввод с клавиатуры 20 слов и найти индекс максимального слова
Нужно сделать ввод с клавиатуры 20 слов и найти индекс максимального слова. Может у кого-то есть.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Возможно ли получить "константный" индекс в векторе?
Здравствуйте, возможно ли получить "константный" индекс в векторе? Я записываю данные в Vector .
Найти в векторе индекс максимального числа
Найти в векторе индекс максимального числа и посчитать сумму всех чисел, слежующих после него сам.
Написать метод, возвращающий индекс искомого элемента в массиве
Принимает массив интов, и значение типа инт, возвращает индекс массива в котором значение совпадает.
Постройте вектор, каждый элемент которого содержит наименьший по абсолютной величине элемент строки
Постройте вектор, каждый элемент которого содержит наименьший по абсолютной величине элемент.
Как создать вектор, который содержит классы?
Нужно что-то подобное (пример на c++): vector <MyStruct> v; //Вектор v содержит структуры.
Вот написал для вектора int'ов, но не работает
Подправьте синтаксис пожалуйста на строке 5И это, я так понимаю, будет самый быстрый поиск для обыкновенного вектора? Damaks, Если уже юзаете вектора, то будет логично использовать и конкретные алгоритмы(STL). Для вашего случая:
find, это который в algorithm? У меня он работает недопустимо медленно. Сейчас попробуй совет asics. Damaks, find не может работать недопустимо медленно. Скорость зависит от кол-ва элементов в нем.
std::search для одного элемента не покатит.
Если find слишком медленно - либо пересмотрите используемый контейнер, либо binary_search после сортировки. Насколько я знаю
find - ищет определенное значение и возвращает итератор
binary_search - ищет диапазон значений по отсортированному вектору и возвращает bool значение (есть/нету)
search - ищет диапазон значений по вектору и возвращает bool значение.
По скорости получается сначала binary_search, потом find, потом search, но для поиска одного числа быстрее find, я прав? Видимо find работает только со строками, а search с числами (Если у тебя не GCC4.5+ или MSVS10, заполни вектор по-другому)
Да, уже понял что ошибся
А про скорость ничего не скажете, что лучше для поиска по вектору int'ов?
Я вот сейчас замерил скорость find, а в search походу если одно число искать, а не диапазон, то мне надо задать его дважды, т.к. там можно задать только диапазон, правильно я мыслю? Или search предназначен только для поиска диапазона, и для поиска определенного числа его использовать неправильно?
Добавлено через 20 минут
Попробовал задать начальное и конечное значение одним числом, не вышло. Оказалось что разница между binary_search и search больше чем возможность поиска по несортированному вектору. binary_search ищет определенное число (у меня получилось его запустить), в то время как search диапазон, который нельзя задать одним числом, или у меня просто не получилось
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Сформировать вектор B=(b1,b2,…bm), каждый элемент которого определяется как минимальный элемент соответствующего столбца исходной матрицы A(n,m)
Сформировать вектор B=(b1,b2,…bm), каждый элемент которого определяется как минимальный элемент.
Как проверить, содержит ли the_content(); определенное слово
Привет пытаюсь выявлять слово в Титле что бы оперировать словами в шаблоне для Сео Делаю вот так .
Как проверить содержит ли строка русские символы ?
Помогите плз. Нужно проверять содержит ли строка введенная пользователем русские символы или нет .
All I want to do is to check whether an element exists in the vector or not, so I can deal with each case.
Чувствительность к регистру
Поиск в векторе чувствителен к регистру. Если бы значение, которое нужно было найти, было «CORNFLOWER» для указанной выше программы, оно не было бы найдено и была бы возвращена vtr.end ().
Range Within Limits
Когда весь список векторов является диапазоном, проверка того, является ли итератор возврата vtr.end (), показывает, было ли значение найдено или нет. Если итератором возврата является vtr.end (), это означает, что значение не было найдено. Теперь, когда диапазон меньше, если итератор возврата является последним элементом выбранного диапазона, это означает, что значение либо не было найдено, либо это последнее значение диапазона.
Примечание. Поиск останавливается на последнем элементе выбранного (меньшего) диапазона, если значение не было найдено в этом диапазоне или если найденное значение является последним элементом выбранного диапазона. Если найденное значение было этим последним элементом, будет возвращен итератор, указывающий на него. Если значение было найдено раньше, поиск остановится на этом элементе перед последним элементом выбранного диапазона. Итератор этого элемента будет возвращен.
17 Answers 17
You can use std::find from <algorithm> :
This returns a bool ( true if present, false otherwise). With your example:
As others have said, use the STL find or find_if functions. But if you are searching in very large vectors and this impacts performance, you may want to sort your vector and then use the binary_search , lower_bound , or upper_bound algorithms.
30k 7 7 gold badges 50 50 silver badges 59 59 bronze badges Good answer! Find is always o(n). lower_bound is o(log(n)) if used with random-access iterators. @liori True it depends on your usage patterns. If you only need to sort it once, then repeatedly do many searches it can save you. @Brian Neal, sorting a large vector is worth if there has to be many element searches on it. Sorting will be O(nlogn) and O(n) will be better if one has to find an element only once :) Be wary this may play havoc with your branch prediction.Use find from the algorithm header of stl.I've illustrated its use with int type. You can use any type you like as long as you can compare for equality (overload == if you need to for your custom class).
If your vector is not ordered, use the approach MSN suggested:
If your vector is ordered, use binary_search method Brian Neal suggested:
binary search yields O(log n) worst-case performance, which is way more efficient than the first approach. In order to use binary search, you may use qsort to sort the vector first to guarantee it is ordered.
21.8k 9 9 gold badges 111 111 silver badges 127 127 bronze badgesI use something like this.
. as that way it's actually clear and readable. (Obviously you can reuse the template in multiple places).
and you can make it work for lists or vectors by using 2 typenames You are basically writing : if true return true else return false . The method can be one lined in : return std::find(Vec.begin(), Vec.end(), Element) != Vec.end();In C++11 you can use any_of . For example if it is a vector<string> v; then:
Alternatively, use a lambda:
Here's a function that will work for any Container:
Note that you can get away with 1 template parameter because you can extract the value_type from the Container. You need the typename because Container::value_type is a dependent name.
8,807 2 2 gold badges 26 26 silver badges 34 34 bronze badgesBear in mind that, if you're going to be doing a lot of lookups, there are STL containers that are better for that. I don't know what your application is, but associative containers like std::map may be worth considering.
std::vector is the container of choice unless you have a reason for another, and lookups by value can be such a reason.
54.6k 8 8 gold badges 88 88 silver badges 153 153 bronze badges Even with lookups by value the vector can be a good choice, as long as it is sorted and you use binary_search, lower_bound or upper_bound. If the contents of the container changes between lookups, vector is not very good because of the need to sort again.Use the STL find function.
Keep in mind that there is also a find_if function, which you can use if your search is more complex, i.e. if you're not just looking for an element, but, for example, want see if there is an element that fulfills a certain condition, for example, a string that starts with "abc". ( find_if would give you an iterator that points to the first such element).
59.5k 88 88 gold badges 230 230 silver badges 318 318 bronze badgesWith boost you can use any_of_equal :
18.8k 5 5 gold badges 58 58 silver badges 132 132 bronze badgesYou can try this code:
2,222 1 1 gold badge 12 12 silver badges 4 4 bronze badgesYou can use the find function, found in the std namespace, ie std::find . You pass the std::find function the begin and end iterator from the vector you want to search, along with the element you're looking for and compare the resulting iterator to the end of the vector to see if they match or not.
You're also able to dereference that iterator and use it as normal, like any other iterator.
11.3k 5 5 gold badges 58 58 silver badges 99 99 bronze badgesYou can use count too. It will return the number of items present in a vector.
Вектор C ++ не имеет функции-члена поиска. Однако в библиотеке алгоритмов есть функции find () разных типов, которые можно использовать для поиска чего-либо в векторе C ++. В библиотеке алгоритмов есть четыре группы функций find (), которые можно классифицировать как «Найти», «Найти конец», «Найти сначала» и «Найти по соседству».
Чтобы использовать библиотеки векторов и алгоритмов, программа на C ++ должна начинаться с:
В этом руководстве приведены основы поиска значения в векторе C ++. Весь код в этом руководстве находится в функции main (), если не указано иное. Если вектор состоит из строк, используйте строковый класс; и не используйте «const char *». В этом случае также должен быть включен строковый класс, например:
InputIterator find (сначала InputIterator, последним InputIterator, const T & value);
Следующий код использует эту функцию, чтобы узнать, входит ли цветок «Василек» в векторный список цветов:
Целый список вектора был целью поиска. Судя по синтаксису функции find (), «first» — это vtr.begin () в коде, а «last» — это vtr.end () в коде. Значение, которое нужно искать в синтаксисе функции find (), обозначенное как const-T & -value, в коде имеет значение «Василек».
Функция find () просматривает список векторов с самого начала. Если он не видит искомого значения, он достигнет конца вектора. Конец вектора — это официально vtr.end (), который находится сразу за последним элементом. Если он не видит искомого значения, он вернет итератор, указывающий на vtr.end ().
Значение, которое он ищет, может находиться в разных местах одного и того же вектора. Когда он видит первое из искомых значений, он останавливается на нем и возвращает итератор, указывающий на это значение.
Каждое значение в векторе имеет индекс. Первое значение имеет индекс 0, соответствующий vtr.begin (). Второе значение имеет индекс 1, соответствующий vtr.begin () + 1. Третье значение имеет индекс 2, соответствующий vtr.begin () + 2. Четвертое значение имеет индекс 3, соответствующий vtr.begin () + 3. ; и так далее. Итак, индекс первого найденного значения определяется как:
Читайте также: