当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ order_of_key()用法及代码示例


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

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

Two important operations that we can perform in these data structures:



  • order_of_key: The number of items in a set that are strictly smaller than k
  • find_by_order: It returns an iterator to the ith largest element

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

例如,

Let us assume we have a set s : {1, 5, 6, 17, 88}, then :
s.order_of_key(6) : Count of elements strictly smaller than 6 is 2.
s.order_of_key(25) : Count of elements strictly smaller than 25 is 4.

与lower_bound()和distance()的比较

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

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

    index = lower_bound(k) – myvector.begin() ;

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

以下示例程序旨在说明order_of_key()的实现:

// CPP program to illustrate order_of_key() 
// for policy based data structures 
  
#include <iostream>  
using namespace std;  
  
// Important header files   
#include <ext/pb_ds/assoc_container.hpp> // Common file  
#include <ext/pb_ds/tree_policy.hpp>  
#include <functional> // for less  
#include <iostream>  
using namespace __gnu_pbds;  
using namespace std;  
  
// Declaring ordered_set 
typedef tree<int, null_type, less<int>, 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



注:本文由纯净天空筛选整理自Jasbir Singh 3大神的英文原创作品 order_of_key() in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。