📜  G ++中基于策略的数据结构

📅  最后修改于: 2021-05-30 18:42:32             🧑  作者: Mango

g ++编译器还支持某些不属于C++标准库的数据结构。这种结构称为基于策略的数据结构。这些数据结构旨在实现高性能,灵活性,语义安全性以及与std中相应容器的一致性。

要使用这些结构,必须在代码中添加以下几行:

#include 
using namespace __gnu_pbds;

例如,下面的代码显示了一个类似set的基于策略的数据结构,它可以添加/删除元素,可以找到小于x的元素数量,在O(logn)时间中找到小于x的最小元素,等等。它也可以像数组一样被索引。该集合的特色在于,我们可以访问元素在排序数组中将拥有的索引。如果该元素未出现在集合中,我们将获得该元素在集合中应具有的位置。

// Program showing a policy-based data structure.
#include  // Common file
#include 
#include  // for less
#include 
using namespace __gnu_pbds;
using namespace std;
  
// a new data structure defined. Please refer below
// GNU link : https://goo.gl/WVDL6g
typedef tree, rb_tree_tag,
             tree_order_statistics_node_update>
    new_data_set;
  
// Driver code
int main()
{
    new_data_set p;
    p.insert(5);
    p.insert(2);
    p.insert(6);
    p.insert(4);
  
    // value at 3rd index in sorted array.
    cout << "The value at 3rd index ::" 
         << *p.find_by_order(3) << endl;
  
    // index of number 6
    cout << "The index of number 6::" 
         << p.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 << "The index of number seven ::"
         << p.order_of_key(7) << endl;
  
    return 0;
}

输出:

The value at 3rd index ::6
The index of number 6::3
The index of number seven ::4

注意:函数order_of_key和find_by_order都以对数时间工作。

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”