美文网首页工作生活
C++ STL equal_range 函数说明

C++ STL equal_range 函数说明

作者: book_02 | 来源:发表于2019-07-03 00:12 被阅读0次

    说明

    equal_range 返回范围[first,last)内等于指定值val的子范围的迭代器。

    注意的是使用这个函数的前提是范围[first,last)内的元素是有序的。

    同时注意函数的返回值类型,返回值是个pair对象,pair的first是左边界的迭代器,pair的second是右边界的迭代器。区间是左闭右开的,[左边界,右边界)。

    头文件

    #include <algorithm>

    例子

    
    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    bool mygreater (int i,int j) { return (i>j); }
    
    int main(int argc, char **argv) 
    {  
        int myints[] = {10,20,30,30,20,10,10,20};
        std::vector<int> v(myints,myints+8);                         // 10 20 30 30 20 10 10 20
        std::pair<std::vector<int>::iterator,std::vector<int>::iterator> bounds;
    
        // using default comparison:
        std::sort (v.begin(), v.end());                              // 10 10 10 20 20 20 30 30
        bounds=std::equal_range (v.begin(), v.end(), 20);            //          ^        ^
        std::cout << "bounds at positions " << (bounds.first - v.begin());
        std::cout << " and " << (bounds.second - v.begin()) << '\n';
        
        // using "mygreater" as comp:
        std::sort (v.begin(), v.end(), mygreater);                   // 30 30 20 20 20 10 10 10
        bounds=std::equal_range (v.begin(), v.end(), 20, mygreater); //       ^        ^
    
        std::cout << "bounds at positions " << (bounds.first - v.begin());
        std::cout << " and " << (bounds.second - v.begin()) << '\n';
        return 0;
    }
    

    结果:

    bounds at positions 3 and 6
    bounds at positions 2 and 5
    

    第一次使用时,使用的是默认的比较器。数组中等于20的范围是[3, 6).

    第二次使用时,使用的是自定义比较器,注意前后要使用一直,即sort使用自定义比较器,equal_range也是使用该比较器。数组中等于20的范围这时变成了[2, 5).

    参考

    http://www.cplusplus.com/reference/algorithm/equal_range/

    相关文章

      网友评论

        本文标题:C++ STL equal_range 函数说明

        本文链接:https://www.haomeiwen.com/subject/ncoxhctx.html