Я только что создал пользовательскую функцию поиска для строк на карте. Я разработал какой-то алгоритм линейного поиска (который я узнал позже) и не был удовлетворен скоростью функции. Поэтому я искал более быструю функцию и нашел собственную функцию карты: map :: find.Какой алгоритм стоит найти STL?
Это было невероятно быстрее, чем линейный алгоритм, который я использовал.
В другом примере функция STL найти была также намного быстрее, чем другая линейная функция, которую я использую.
Но как это возможно? Если вы используете алгоритм двоичного поиска, вам нужно сначала отсортировать карту, которая займет (гипотетически) больше времени, чем больше ваша карта.
Также как узнать алгоритмы, лежащие в основе этих основных функций? Есть ли список или какая-то база данных, чтобы узнать об этом?
Спасибо за все ваши ответы! Я поддержал лучшие ответы и принял ответ Макса Либберта, потому что он был самым подробным.
Paul :)
Не стоит отвечать, но gcc 'find' использует регулярный цикл while в качестве входных итераторов (т. Е.' Istream') и форвардных/двунаправленных итераторов (т. Е. 'List'). Для итераторов с произвольным доступом (т. Е. 'Vector') он использует цикл' for', но он проверяет четыре элемента за раз. Реализация Visual Studio - это просто регулярный цикл 'for', проверяющий один элемент за раз, но он специализирован для поиска строк. –
Я нашел [эти] (http://channel9.msdn.com/shows/Going+Deep/C9-Lectures-Introduction-to-STL-with-Stephan-T-Lavavej/) интро видео на канале9, чтобы быть действительно полезным а также при запуске с STL – MarkB42