C ++字符串数组二进制搜索

时间:2010-03-29 23:41:07

标签: c++ algorithm string search binary

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";

如果我还想在字符串数组中找到针的位置,是否有“简单”的方法可以找到?

2 个答案:

答案 0 :(得分:5)

来自SGI docs

  

请注意,这不一定是您感兴趣的信息!通常,如果您正在测试元素是否存在于某个范围内,您可能想知道它在哪里(如果存在),或者应该插入哪个元素(如果它不存在)。函数lower_boundupper_boundequal_range提供此信息。

我认为这组接口背后的原因是binary_search并没有真正表明它是否会返回匹配范围的开始(假设有匹配)或范围的结束,并且您可能想要一个或另一个,具体取决于您是否要对容器中已存在的数据执行某些操作或添加新项目(可能在匹配范围的末尾)。或者您可能希望将整个范围传递给其他东西。因此,执行二进制搜索的各种或多或少的特定接口。

不幸的是,如果您正在考虑,“我需要二元搜索程序”,您不太可能找到其他的。

答案 1 :(得分:0)

我用Google搜索并发现了这一点 http://www.cplusplus.com/reference/algorithm/binary_search/ ......这可能是实现目标的简单方法