- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在寻找一个数据类,它可以使数据保持有序,但也允许以我想要的任何顺序进行访问。
基本上我正在寻找一个队列,它允许我以随机顺序访问项目并保持顺序(int 从最低到最高)。添加项目时,它不必求助于所有内容(O(n*log(n)) 操作),而只是快速插入和删除它(O(log (n)))。我知道存在这样的数据结构(基于二叉树的队列),但 C++ 提供吗?我当前的应用程序要求我可以做一些事情,比如从项目队列/列表中获得中间或获得第二高优先级的项目。 c++ 是否为此设置了默认数据类?还是我必须自己制作?
顺便说一句,这是 c++ 98
最佳答案
我认为 vector plus heap 就是您要找的东西。
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
再次使 vector 成为堆。
关于c++是否有默认数据类以合理的速度进行基于排序索引的访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26544610/
我有一个曾经是 TreeView 控件的菜单,但现在我想让每个项目更加直观,并向树中的每个对象添加更多信息。 我的第一个意图是制作一个代表项目的用户控件,并在运行时将它们添加到面板中。这是一个好方法吗
我是 Docker 新手,想知道是否有可能(并且是一个好主意)在 Docker 容器中进行开发。我的意思是创建一个容器,执行 bash,安装和配置我需要的一切,然后开始在容器内进行开发。 容器将成为我
在 Java 中: Parent obj = new Child(); 我创建了一个 Parent 类型的对象。我假设我只能调用父类中定义的方法。因此,我无法调用 Child 中定义的“附加”方法或访
注意:我省略了其他两个阶段(V 和 W)的代码,示例中不需要。 我很确定,我这样处理“开”和“关”时间的方式并不是一种有效的方式。 我想使用查找表实现“开”和“关”脉动。计时器应与表的当前选定值进行比
当代码中包含 Java instanceof 运算符时,许多人会扬起眉毛并说这是禁忌。例如,在这个 other SO Q&A ,答案说: Note that if you have to use th
我是一名优秀的程序员,十分优秀!