📜  C++中的unordered_map equal_range

📅  最后修改于: 2021-05-30 19:13:43             🧑  作者: Mango

unordered_map :: equal_range()是C++ STL中的内置函数,用于返回范围的边界,该范围包括容器中的所有元素,且键的比较值等于k。 unordered_map容器是键唯一的容器,范围最多包含一个元素。范围由两个迭代器定义,

  • 第一个指向范围的第一个元素。
  • 第二个指针指向范围的最后一个元素。

参数:该函数接受单个参数,该用于保存要比较的值。

返回值:它返回一对,其中包含一对定义所需范围的迭代器。它的成员是pair :: first和pair :: second。第一个是该范围下限的迭代器,第二个是其范围上限的迭代器。范围内的元素是这两个迭代器之间的元素,包括第一对,但不包括第二对。

下面的程序说明了C++ STL中的unordered_map :: equal_range()函数:

范例1:

// C++ program to implement 
// unordered_map::equal_range() function
#include 
#include 
using namespace std;
  
// main program
int main()
{
    unordered_map  map = { { 1, 3 }, 
                                     { 1, 2 }, 
                                     { 3, 1 }, 
                                     { 2, 3 } };
    for (int j = 1; j <= 3; j++) {
        auto range = map.equal_range(j);
          
        //'auto' is a keyword
        for (auto i = range.first; i != range.second; i++) {
              
            // iterates first to last
            cout << "first : " << i->first;
            cout << "\nsecond : " << i->second << endl
                << endl;
        }
    }
}
输出:
first : 1
second : 3

first : 2
second : 3

first : 3
second : 1

程式2:

// C++ program to search 'unordered map' container
#include 
#include 
using namespace std;
  
// Rename 'unordered_map' as 'gfg'
typedef unordered_map gfg;
  
  
int main()
{
    // 'g' is object
    gfg g;
      
    // Container values
    // Contents are look like [a, b] [c, d] [e, f]
    g.insert(gfg::value_type('a', 'b'));
    g.insert(gfg::value_type('b', 'd'));
    g.insert(gfg::value_type('e', 'f'));
  
    // Look into the syntax part above
    // here 'f' is key
    pair p1 = g.equal_range('f');
      
    // 'f' is not exits, so no output for 'f'
    cout << "search for 'f' :";
    for (; p1.first != p1.second; ++p1.first) {
        cout << p1.first->first << ", " << p1.first->second << endl;
    }
      
    // Successful search
    // Here 'a' is key
    p1 = g.equal_range('a');
      
    // 'a' is exits, so it searched successfully
    cout << "\nsearch for 'a' : [";
    for (; p1.first != p1.second; ++p1.first) {
        cout << p1.first->first << ", " << p1.first->second << "]";
    }
      
    return 0;
}
输出:
search for 'f' :
search for 'a' : [a, b]

复杂:

  • 平均情况:带有键k的元素数量是线性的,这是恒定的。
  • 最坏的情况:容器的尺寸是线性的。
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”