c++是否有一个默认的数据类,用于以合理的速度对基于索引的访问进行排序

c++ is there a default data class for sorted index based acces at reasonable speed?

本文关键字:于索引 索引 访问 排序 数据 默认 有一个 是否 c++ 用于 速度      更新时间:2023-10-16

我正在寻找一个数据类,它可以按顺序保存数据,但也可以按我想要的任何顺序访问。

基本上,我正在寻找一个队列,它允许我以随机顺序访问项目,并保持顺序(int从最低到最高)。当添加项目时,它不应该求助于所有操作(O(n*log(n)),而只需要以快速的方式插入和删除它(O(log(n)))。我知道存在这样的数据结构(基于二叉树的队列),但c++提供了吗?我当前的应用程序要求我可以做一些事情,比如从队列/项目列表中居中,或者获得第二高优先级的项目。c++对此有默认的数据类吗?还是我必须自己做?

顺便说一下,这是c++98

我认为向量加堆就像您正在寻找的一样。

vector<int> v;
// insert elements
v.push_back(3);
push_heap(v.begin(), v.end());
v.push_back(2);
push_heap(v.begin(), v.end());
v.push_back(4);
push_heap(v.begin(), v.end());
// get the second big
sort_heap(v.begin(), v.end());
cout << v[v.size() - 2] << endl;
// insert elements
make_heap(v.begin(), v.end());
v.push_back(7);
push_heap(v.begin(), v.end());
// get the second big
sort_heap(v.begin(), v.end());
cout << v[v.size() - 2] << endl;

插入速度很快。但每次在您想要访问不是最大的项之前,您都必须对堆进行排序,因为堆只会给您最大的项。之后,在新插入之前,您必须调用make_heap,使向量再次成为堆。

否,标准库中不存在这样的结构。我认为它也不存在于boost中,但看看boost.MultiIndex不会有什么坏处。

否则,这样的结构在概念上很简单——某种平衡的搜索树(可能是a-b或红黑),它还需要维护节点中的子树数量(这可能使a和b更高的a-b树比2-3或红黑更适合。但似乎没有任何东西可以帮助你实现它。

你必须自己制作。

围绕std::向量创建一个包装器。根据需要添加委托给向量的方法,对于插入方法,请调用std::upper_bound来查找插入位置。