C++ unordered_set::equal_range() 函数



C++ 的std::unordered_set::equal_range()函数用于返回一个范围的边界,该范围包含所有等于k的元素。如果unordered_set容器的键是唯一的,则该范围至少包含一个元素。

该范围由两个迭代器定义,第一个迭代器指向所需范围的第一个元素,第二个迭代器指向范围的最后一个元素的下一个位置。

语法

以下是std::unordered_set::equal_range的语法。

pair<iterator,iterator> equal_range( const Key& key );
pair<const_iterator,const_iterator> equal_range ( const key_type& k ) const;

参数

  • k − 表示要比较的值。

返回值

此函数返回一对边界,pair::first成员是范围的下界,pair::second成员是范围的上界。

示例 1

在下面的示例中,我们将演示unordered_set::equal_range()函数的使用。

#include <iostream>
#include <unordered_set>
using namespace std;

int main() {
   unordered_set<int> uSet;
   uSet.insert({ 5, 30, 180 });
	
   auto range = uSet.equal_range(30);
   if (range.first != uSet.end()) {
      for (; range.first != range.second; ++range.first)
         cout << *range.first << endl;
   }
   else
      cout << "Element does not exist";
   return 0;
}

输出

如果我们运行上面的代码,它将生成以下输出:

30

示例 2

考虑下面的示例,我们将使用equal_range()函数来测试给定键是否存在。

#include <iostream>
#include <unordered_set>
using namespace std;

int main() {
   unordered_set<int> uSet;
   uSet.insert({ 5, 30, 180 });
	
   auto range = uSet.equal_range(50);
   if (range.first != uSet.end()) {
      for (; range.first != range.second; ++range.first)
         cout << *range.first << endl;
   }
   else
      cout << "Element does not exist";
   return 0;
}

输出

以下是上述代码的输出:

Element does not exist

示例 3

让我们看看下面的例子,我们将使用equal_range()函数来查找指定键的上下界。

#include <iostream>
#include <unordered_set>
using namespace std;

int main() {
   unordered_set<int> uSet = { 5, 30, 50, 180 };
   unordered_set<int>::iterator it;
	
   cout<<"uSet contains:";	
   for(auto &it: uSet)
      cout<<" "<<it;
   //finding the bound range of 50;
   pair<unordered_set<int>::iterator, unordered_set<int>::iterator> bound;
   bound = uSet.equal_range (30);
 	
   cout<<"\nLower bound is: "<<*bound.first<<endl;  
   cout<<"Upper bound is: "<<*bound.second<<endl;  
   return 0;
}

输出

上述代码的输出如下:

uSet contains: 180 50 30 5
Lower bound is: 30
Upper bound is: 5
广告