2010-03-29 62 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