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
廣告