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等的更多准备工作,请参阅“完整面试准备课程” 。