Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Поиск в массиве STL |
Автор: Annuta 26.12.2006, 11:02 | ||
Народ подскажите мне пожаста, у меня есть массив строк типа CStringArray ... когда в этом массиве более 1000 строчек - прога начинает тормозить... я слышала что использование STL может разрешить эту проблему ! Это так ??? Но я в STL ни бум бум!!! Как это сделать...??? Помогите мне переписать кусочек кода... вот мой нынешний код.
спасибо... |
Автор: zkv 26.12.2006, 11:39 |
копайте в сторону hash-таблиц, либо map'ов, многое обсуждалось, посмотрите здесь, например: http://forum.vingrad.ru/topic-118125/unread-1/hl/%25D1%2585%25D0%25B5%25D1%2588/index.html |
Автор: ZC1989 26.12.2006, 11:53 | ||
если простой пример на STL то получится как-то так
Добавлено @ 11:54 список будет перебираться пока все эллменты не проверятся... ЗЫ: надеюсь прельна вопрос понял ![]() |
Автор: chaos 26.12.2006, 12:12 | ||
|
Автор: Annuta 26.12.2006, 12:13 |
Спасибо за код ZC1989, всё работает... только вот маленький вопросик.. а как мне добавить строчку в этот массивчик...?? и ещё.. это на самом деле работает быстрее чем обычный перебор ??? Что круче вектора или мапсы..??? спасибо... |
Автор: zkv 26.12.2006, 12:13 | ||
скорее всего нет, в вашем примере не видно существенного выигрыша по скорости поиска, а вопрос видимо был именно в этом. простой пример с map'ом, возможно следует сделать все по другому, но я не знаю какая ваша конечная цель, возможны опечатки ![]()
|
Автор: Annuta 26.12.2006, 12:16 |
Моя конечная цель сделать так, чтобы это перебиралось как можно быстрее... и не вешало всю мою прогу. |
Автор: ZC1989 26.12.2006, 12:17 |
zkv, было сказано что после 1000 строк тормоза начинаются, сомневаюсь что в моём примере это начнётся... да и find работает так же, только в функцию это засунуто |
Автор: Annuta 26.12.2006, 12:22 |
ZC1989, как добавить строку в массив ??? У меня задача .. перебрать весь массив - если такая строка не встретилась - добавить её туда... Как ? |
Автор: Annuta 26.12.2006, 12:59 |
Народ!!! Помогите дописать добалвение !... плиз... |
Автор: zkv 26.12.2006, 13:11 |
внимательней надо быть ![]() для вектора: для словаря: я догадываюсь, что вам наиболее подошел бы контейнер std::set<std::string>, там добавление insert(), если я не ошибаюсь, что вообще надо сделать то? |
Автор: Annuta 26.12.2006, 13:27 | ||||||
Сделать надо вот что... идёт поток... в потоке много строчек.. я выбираю все "уникальные" .. заношу их в массив .. (если их там ещё нет соотв) ... и сё... потом массив вывожу на экран. .. я пробывала сделать.. так
и потом поиск совпадения...
и потом пытаюсь вставить но он ругается...
как написать чтобы он добавлял новую строку в конец списка... |
Автор: zkv 26.12.2006, 13:37 | ||
ваша задача решается так:
если я правильно понял задание ![]() |
Автор: Korman 26.12.2006, 13:44 |
Спасибо... zkv, .. я ща попробую.. |
Автор: Annuta 26.12.2006, 13:53 |
Уважаемый zkv, ваш код не работает... вы просто скажите почему когда я пише так theMap.insert(INT2STRING::value_type(9,"Nine"));... всё работает... а когда так theMap.insert(INT2STRING::value_type(9,mas_str)); // НЕ РАБОТАТЕТ!!! хотя mas_str - CString; вот в чём вопрос..... |
Автор: zkv 26.12.2006, 14:01 | ||
в том виде, в котором я привел? у меня почему то работает...
theMap.insert(INT2STRING::value_type(9,mas_str.GetBuffer() )); - но это неверный путь... |
Автор: Korman 26.12.2006, 15:15 |
Плчему плохо...? долго ? не корректно ??? или что ??? |
Автор: zkv 26.12.2006, 15:32 |
представь, тебе надо вбить в стенку гвоздь, перед тобой молоток и топор, лежат они перед тобой на одинаковом расстоянии, каким инструментом ты воспользуешься? Нет, ну можно конечно и обухом топора гвоздь в стенку забить, но молотком то удобнее, так как он для этого предназначен. то же самое здесь, словарь служит для хранения пар значений, а по условию задачи, как я понял, нас, изначально, интересуют только строки, притом каждая в единственном экземпляре, и ничего каждой строке сопоставлять не надо. Вывод: наш инструмент - множество, т.е. std::set<string> |
Автор: Korman 26.12.2006, 16:09 |
zkv, а если я использую std::set<string> ... то как мне данный массив вывести в едит??? |
Автор: zkv 26.12.2006, 16:29 | ||
|