【问题标题】:C++ string array binary searchC++ 字符串数组二分查找
【发布时间】:2011-02-02 06:34:51
【问题描述】:
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++ algorithm string search binary


    【解决方案1】:

    来自SGI docs

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

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

    不幸的是,如果您在想“我需要一个二分搜索例程”,那么您就不太可能找到其他的。

    【讨论】:

      【解决方案2】:

      我用谷歌搜索找到了这个 http://www.cplusplus.com/reference/algorithm/binary_search/...这可能是实现目标的简单方法

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-20
        • 2019-01-28
        • 2019-03-01
        相关资源
        最近更新 更多