📜  C++中的order_of_key()

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

order_of_key()是有序集的内置函数,它是C++中基于策略的数据结构。基于策略的数据结构不是C++标准库的一部分,但g ++编译器支持它们。

有序集是g ++中基于策略的数据结构,可将唯一元素保持在已排序的顺序中。它以log(n)复杂度执行由STL中的set数据结构执行的所有操作,还以log(n)复杂度执行两个附加操作。

order_of_key()函数接受一个键,并返回有序集合中的元素数量,这些元素的数量严格小于作为参数传递给它的键。

例如,

与lower_bound()和distance()的比较

  • 在C++中,我们有std :: distance,它使用两个迭代器并计算它们之间的距离。即它们之间的元素数量。它可以替代find_by_order,但对于有序集,其时间复杂度为O(n)。
  • lower_bound也是一个选项,它花费log(n)的时间。它将迭代器返回到不少于k的第一个元素。但是由于它返回一个迭代器,所以我们永远无法知道小于k的元素的索引或数量。

    对于向量和线性数据结构,可以执行以下操作:

    但是由于set是基于树的数据结构,因此我们无法执行此操作。

下面的程序说明了order_of_key()的实现:

// CPP program to illustrate order_of_key()
// for policy based data structures
  
#include  
using namespace std; 
  
// Important header files  
#include  // Common file 
#include  
#include  // for less 
#include  
using namespace __gnu_pbds; 
using namespace std; 
  
// Declaring ordered_set
typedef tree, rb_tree_tag, 
            tree_order_statistics_node_update> 
    ordered_set; 
  
  
// Driver code 
int main() 
{ 
    ordered_set mySet;
      
    // Inserting elements to ordered_set
    mySet.insert(5); 
    mySet.insert(2); 
    mySet.insert(6); 
    mySet.insert(4); 
  
    // count of elements less than 6 
    cout << "Count of elements less than 6::"
        << mySet.order_of_key(6) << endl; 
  
    // number 7 not in the set but it will show the 
    // index number if it was there in sorted array. 
    cout << "Count of elements less than 7 ::"
        << mySet.order_of_key(7) << endl; 
  
    return 0; 
} 
输出:
Count of elements less than 6::3
Count of elements less than 7 ::4
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”