2010-03-29 67 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_boundequal_range提供此信息。

我覺得這組接口背後的原因是,binary_search並不真正表明是否將返回匹配的範圍的開始(假設有匹配)或範圍的結束,和你可能需要一個或另一個,具體取決於您是否想對容器中已有的數據執行某些操作,或者添加一個新項目(可能是匹配範圍的末尾)。或者你可能想把整個範圍傳遞給別的東西。因此,各種或多或少的特定接口來執行二進制搜索。

不幸的是,如果你在想「我需要一個二分查找程序」,你不太可能找到其他的。

+0

+1 @邁克爾曼我的答案是完全錯誤的一種簡單的方法:) – AraK 2010-03-30 00:01:13