2010-03-29 2 views
4
string Haystack[] = { "Alabama", "Alaska", "American Samoa", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "District of Columbia", 
       "Florida", "Georgia", "Guam", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", 
       "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", 
       "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Northern Mariana Islands", "Ohio", "Oklahoma", 
       "Oregon", "Pennsylvania", "Puerto Rico", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "US Virgin Islands", "Utah", 
       "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming"}; 

string Needle = "Virginia"; 

if(std::binary_search(Haystack, Haystack+56, Needle)) 
     cout<<"Found"; 

Если я также хотел найти расположение иглы в массиве строк, есть ли «простой» способ узнать?C++ строка массив двоичный поиск

ответ

5

От SGI docs:

Обратите внимание, что это не обязательно информация, которую вы заинтересованы в! Обычно, если вы проверяете, присутствует ли элемент в диапазоне, вы хотите знать, где он находится (если он присутствует) или где он должен быть вставлен (если его нет). Функции lower_bound, upper_bound и equal_range предоставляют эту информацию.

Я думаю, что рассуждение за этим набором интерфейсов, что binary_search действительно не указывают, будет ли он вернуть начало диапазона спичек (предполагая, что результаты) или конец диапазона, а вы может хотеть того или другого в зависимости от того, хотите ли вы что-то сделать с данными уже в контейнере или добавить новый элемент (возможно, до конца соответствующего диапазона). Или вы можете передать весь диапазон на что-то еще. Следовательно, различные более или менее конкретные интерфейсы для выполнения двоичного поиска.

К сожалению, вы вряд ли найдете другие, если вы думаете: «Мне нужна бинарная поисковая программа».

+0

+1 @Michael Человек мой ответ был совершенно неправильно :) – AraK

Смежные вопросы