Про вектор
От: Аноним  
Дата: 18.10.04 13:32
Оценка:
Привет олл, как мне узнать есть ли векторе vector<string> элемент, равный некоторой строке. Всем большое спасибо
Re: Про вектор
От: Bell Россия  
Дата: 18.10.04 13:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Привет олл, как мне узнать есть ли векторе vector<string> элемент, равный некоторой строке. Всем большое спасибо



#include <vector>
#include <string>
#include <algorithm>

int main()
{
   std::vector<std::string> arr;
   ...
   std::vector<std::string>::iterator it = std::find(arr.begin(), arr.end(), "some string");
   if(it != arr.end())
   {
      //Строка есть в векторе, it указывает на соответсвующий элемент.
   }
   return 0; 
}
Любите книгу — источник знаний (с) М.Горький
Re: Про вектор
От: _nn_ www.nemerleweb.com
Дата: 18.10.04 13:39
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Привет олл, как мне узнать есть ли векторе vector<string> элемент, равный некоторой строке. Всем большое спасибо


Воспользоваться std::find.

std::vector<std::string> x;
x.push_back("1");
x.push_back("12");
x.push_back("123");
x.push_back("1234");

std::string s("12")
std::vector<std::string>::iterator it = std::find(x.begin(),x.end(),s);

if(it!=x.end()) // нашли
 std::cout<<"found"
else
 std::cout<<"not found";
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Про вектор
От: Alexmoon Украина  
Дата: 18.10.04 14:00
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Привет олл, как мне узнать есть ли векторе vector<string> элемент, равный некоторой строке. Всем большое спасибо


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

навскидку. Если бы этот вектор содержал у меня какую нибудь ключевую информацию и в большом объеме и при этом поиск критичен по времени, то не помешает как минимум отсортировать последовательность, потому как в неотсортированной последовательности возможен только последовательный поиск, в котором если в последовательности более 16 элементов, то эффективность последовательного поиска падает на глазах. Если уж вектор, то только случае, если заполняется одноразово при инициализации, тогда меньше места, а эффективность поиска можна подогнать за счет одноразовой сортировки. Если постоянная вставка и удаление, то мап, потому как не будет постоянного копирования всего массива по памяти. Можна посмотреть в сторону быстрых хешей в качестве ключей. На сегодняшний день полно быстрых хеш функций с достаточным запасом вариантов перед первым повторением. Вообщем эта тема настолько многогранна, что одним постом не описать и даже статьей. Это просто совет.

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