不确定要使用哪种数据结构
Not sure what data structure to use
我目前正在尝试使用结构的向量/代数。 结构的简单示例...
struct job {
int id;
int time;
}
我希望能够搜索结构以找到与时间匹配的作业,将其从结构中删除并继续检查该结构中的其他 id。 示例代码...
<vector> jobs;
<deque> started;
for (unsigned int i = 0; i < jobs.size(); i++)
{
if (jobs.at(i).time == time)
{
started.push_back(jobs.at(i));
jobs.erase(jobs.begin() + i);
i--;
}
}
time++;
这按照我想要的方式工作,但它似乎也很笨拙,因为我每次删除时都会调整索引,我认为这仅仅是因为我对数据结构的了解不如我。 有人能给我一些建议吗?
注意 - 我不认为这与这篇文章被标记的内容重复,因为我不想用我已经拥有的东西有效地做一些事情。 对我来说,考虑到我每次从中获得所需的东西时都会减小 deque 的大小,这似乎足够有效。 我希望的是一些建议,以确定我尝试使用deques的最佳数据结构是什么,这些数据结构可能不会在我处理它们时进行处理。
我也可能错了,我的用法很好,但对我来说似乎不对劲。
好吧,我一直都知道这个演讲会派上用场!这里的信息是"了解你的 STL 算法"。有了这个,让我向您介绍std::stable_partition
.
您可以做的一件事是只使用一个向量,如下所示:
using namespace std;
vector<job> jobs;
// fill the vector with jobs
auto startedJobsIter = stable_partition(begin(jobs), end(jobs),
[=time](job const &_job) { return _job.time == time; });
现在,begin(jobs)
和startedJobsIter
之间的一切都满足条件,而startedJobsIter
和end(jobs)
之间的一切都不满足条件。
编辑
如果你不关心项目的相对顺序,那么你只使用 std::partition
,它可以提高性能,因为它不会保留原始向量中元素的相对顺序,但仍然会将其分为两部分。
编辑 2
以下是对旧C++标准的改编:
struct job_time_predicate {
public:
job_time_predicate(int time) : time_(time) { }
bool operator()(job const &the_job) { return the_job.time == time_; }
private:
int time_;
};
int main()
{
using namespace std;
int time = 10;
vector<job> jobs;
// fill that vector
vector<job>::iterator startedJobsIter =
stable_partition(jobs.begin(), jobs.end(), job_time_predicate(time));
}
相关文章:
- 编译器上的策略数据结构不起作用
- 哪些存储了不完整类型的 STL 数据结构可以用作类成员?
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 从输入中删除重复项,而不使用任何数据结构
- 使用选择排序对数组数据结构进行排序,但它不起作用
- 当接收到不明确的规范时,表示图的邻接列表的数据结构
- 具有引用数据成员的结构不是文本类型吗?
- 将不相邻的内存缓冲区视为连续缓冲区的数据结构
- 是STL中的联合获取(或不连接集)数据结构
- 从保存变量数据类型的数据结构中检索值,而不指定返回类型
- 通过全球常数对静态数据成员的初始化会导致不确定的行为
- 我如何实现递归函数的模板,该模板允许C 中的许多不确定数据类型的参数
- 地图数据结构在 Main 中不显示保存的条目.cpp
- 不确定是否在单链表中显示唯一数据
- 数据结构:我获得了不希望的价值
- 报告描述符和报告数据结构不正确
- 不确定要使用哪种数据结构
- 修改 std::vector 的底层数据结构不会改变其大小
- 不确定使用哪种数据结构
- c++ STL:为什么STL数据结构不提供测量内存消耗的函数?