Skip to content
Related Articles

Related Articles

find_by_order() in C++
  • Last Updated : 06 Apr, 2021

The find_by_order() is a built-in function of Ordered Set which is a Policy Based Data Structure in C++. Policy-based data structures are not part of the C++ Standard Template Library but the g++ compiler supports them.

Ordered Set is a policy-based data structure in g++ that maintains unique elements in sorted order. It performs all the operations as performed by Set in STL in O(logN) complexity. 
In addition to that, the following two operations are also performed in O(logN) complexity:

  • order_of_key (K): Number of items strictly smaller than K.
  • find_by_order(k): Kth element in a Set (counting from zero).

The find_by_order() function accepts a key, say K, as an argument and returns the iterator to the Kth largest element in the Set.

Examples:

Considering a Set S = {1, 5, 6, 17, 88}, 
s.find_by_order(0): Returns the 0th largest element, i.e. the minimum element, i.e. 1.
s.find_by_order(2): Returns the 2nd largest element, i.e. 6.



Note: If K >= N, where N is the size of the set, then the function returns either 0 or in some compilers, the iterator to the smallest element. 

Below is the implementation of find_by_order() function in C++:

C++14




// C++ program to implement find_by_order()
// for Policy Based Data Structures
  
#include <bits/stdc++.h>
  
// Importing header files
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;
  
// Declaring Ordered Set
typedef tree<int, null_type, less<int>, rb_tree_tag,
        tree_order_statistics_node_update>
    pbds;
  
// Driver Code
int main()
{
    
      int arr[] = {1, 5, 6, 17, 88};
     int n = sizeof(arr)/sizeof(arr[0]);
    
    pbds S;
    
      // Traverse the array
    for (int i = 0; i < n; i++) {
        
          // Insert array elements
          // into the ordered set
        S.insert(arr[i]);
    }
    
      // Returns iterator to 0-th
      // largest element in the set
    cout << *S.find_by_order(0) << " ";
    
    // Returns iterator to 2-nd
      // largest element in the set
    cout << *S.find_by_order(2);
  
    return 0;
}
Output:
1 6

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer Geeks Classes Live and Geeks Classes Live USA

My Personal Notes arrow_drop_up
Recommended Articles
Page :