std::set::equal_range


pair<const_iterator,const_iterator> equal_range (const value_type& val) const;
pair<iterator,iterator> equal_range (const value_type& val);

set 类模板中的公共成员函数。 返回值匹配给定搜索值的元素组成的范围。

因为 set 容器中所有元素都是唯一的,所以返回的范围中最多只有一个元素。

如果没有发现匹配的元素,返回范围的长度将为 0,且首尾两个迭代器都将指向按内部比较对象的排序规则排在 val 之后的第一个元素。

如果传递给容器内部比较对象的两个元素使得比较对象返回 false,且该特性是自反的(Reflexive)(即两个参数不管以什么顺序传递给比较对象,都返回 false),那么两个主键等价。



val:需要被搜索的值。

成员类型 val_type 是存储在当前容器中的元素的类型,作为 set 实例化时第一个模板参数(T)的别名而存在。

返回

返回一个二元组

该二元组由两个指向容器中元素的迭代器组成,第一个迭代器与 set::lower_bound 传入 val 返回的迭代器相同,第二个迭代器与 set::upper_bound 传入 val 返回的迭代器相同。

如果 set 对象是 const 限定的,那么函数返回的二元组由 const_iterator 组成,否则返回的二元组由 iterator 组成。

成员类型 iterator 及 const_iterator 是指向容器中元素的双向迭代器的类型。


#include <set>
#include <iostream>

namespace ClassFoo{
void SetEqualRangeExample1() {
    using namespace std;
    set<int> foo1;
    pair<set<int>::iterator,set<int>::iterator> it;

    foo1.insert(1);
    foo1.insert(3);
    foo1.insert(6);
    foo1.insert(9);
    foo1.insert(12);

    it = foo1.equal_range(6);
    cout << "foo1.equal_range(6):"
        << *(it.first) << " " << *(it.second) << endl ;

    it = foo1.equal_range(7);
    cout << "foo1.equal_range(7):"
        << *(it.first) << " " << *(it.second) << endl ;
}
}
int main( )
{
    ClassFoo::SetEqualRangeExample1();
    return 0;
}

输出

foo1.equal_range(6):6 9
foo1.equal_range(7):9 9​



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`std::equal_range`是C++ STL中的一个算法函数,用于在已排序的容器中查找某个值的范围。它返回一个pair对象,其中第一个元素是指向第一个等于给定值的元素的迭代器,第二个元素是指向第一个大于给定值的元素的迭代器。如果没有找到给定值,则这两个迭代器均指向第一个大于给定值的元素的位置。 以下是`std::equal_range`函数的函数原型: ```c++ template<class ForwardIt, class T> std::pair<ForwardIt, ForwardIt> equal_range(ForwardIt first, ForwardIt last, const T& value); template<class ForwardIt, class T, class Compare> std::pair<ForwardIt, ForwardIt> equal_range(ForwardIt first, ForwardIt last, const T& value, Compare comp); ``` 其中: - `first`和`last`表示要查找的元素范围,必须是已排序的。 - `value`表示要查找的值。 - `comp`是可选的,表示比较函数,用于比较元素的值,默认为`std::less<T>`。 下面是一个使用`std::equal_range`函数查找vector中某个值范围的例子: ```c++ #include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> v = {1, 2, 3, 4, 4, 4, 5, 6}; auto range = std::equal_range(v.begin(), v.end(), 4); std::cout << "Range of 4: [" << std::distance(v.begin(), range.first) << ", " << std::distance(v.begin(), range.second) << ")" << std::endl; return 0; } ``` 输出: ``` Range of 4: [3, 6) ``` 这表示4在vector中的范围是从下标3到下标6之间的元素(不包括下标6)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值