C++ 不确定要使用什么数据结构
我目前正在尝试处理结构的向量/deques。结构的简单示例C++ 不确定要使用什么数据结构,c++,data-structures,C++,Data Structures,我目前正在尝试处理结构的向量/deques。结构的简单示例 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 == ti
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++;
工作;
起动;
for(无符号整数i=0;i
这是我想要的方式,但它看起来也很粗糙,因为我每次删除时都会调整索引,我认为这只是因为我对数据结构的了解不够。有人能给我一些建议吗
注意-我不认为这是一个重复的什么,这篇文章已被标记为,因为我不希望做一些有效的东西,我已经有了。对我来说,考虑到每次我从deque中得到所需的东西时,我都会缩小deque的大小,这似乎足够有效。我希望得到的是一些建议,可以帮助我找出最好的数据结构是什么,以便我尝试使用deques,因为在我处理deques时,这些数据结构可能不需要处理
我也可能是错的,我的用法很好,但我似乎不喜欢。嗯,我一直知道这会派上用场的!这里的信息是“了解你的STL算法”。接下来,让我向您介绍std::stable\u分区
您可以只使用一个向量,如下所示:
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; });
嗯,我一直都知道这会派上用场的!这里的信息是“了解你的STL算法”。接下来,让我向您介绍std::stable\u分区
您可以只使用一个向量,如下所示:
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; });
好的,谢谢你,乔恩!我会给你一个可能的Hi Drop副本。我正在寻找一个更好的结构来处理我目前使用deque所做的事情。我也不需要什么是顺序,因为结构有我需要的信息。看起来是一篇不错的帖子,所以我将通读一遍。您可能想查看一个具有固有排序的
std::multiset
(尽管您需要告诉它job
s是按job.time
排序的)。删除元素也应该很容易。好的,谢谢Jon!我会给你一个可能的Hi Drop副本。我正在寻找一个更好的结构来处理我目前使用deque所做的事情。我也不需要什么是顺序,因为结构有我需要的信息。看起来是一篇不错的帖子,所以我将通读一遍。您可能想查看一个具有固有排序的std::multiset
(尽管您需要告诉它job
s是按job.time
排序的)。删除元素也应该很容易。好的,谢谢纳赛尔!我也会看看你的演讲!出于好奇,这都是C++11吗?我认为这对我不起作用。我问起,因为我注意到YouTube视频的缩略图显示了C++ 11i在这里使用了C++ 11的东西,但是既没有< C++ >稳定的分区> /代码>也没有<代码>分区>代码>是C++ 11,你可以将这个解决方案适应于旧的C++标准。我很惊讶地看到std::stable_分区
用于此。我希望std::remove_如果@MooingDuck也能起作用。您认为使用稳定分区
或分区
来使用删除
有什么缺点吗?纳赛尔:老实说,我刚刚花了10分钟的时间试图弄清楚他们之间是否有什么不同。然后我放弃了,并进行了一次SO搜索:“remove_if和partition都将“good”元素放在第一位。partition将“bad”元素放在第二位,而remove_if没有指定后面是什么——它可能是bad元素,但也可能是任何(good或bad)元素的副本。”我不知道他们有多相似。好的,谢谢纳赛尔!我也会看看你的演讲!出于好奇,这都是C++11吗?我认为这对我不起作用。我问起,因为我注意到YouTube视频的缩略图显示了C++ 11i在这里使用了C++ 11的东西,但是既没有< C++ >稳定的分区> /代码>也没有<代码>分区>代码>是C++ 11,你可以将这个解决方案适应于旧的C++标准。我很惊讶地看到std::stable_分区
用于此。我希望std::remove_如果@MooingDuck也能起作用。您认为使用稳定分区
或分区
来使用删除
有什么缺点吗?纳赛尔:老实说,我刚刚花了10分钟的时间试图弄清楚他们之间是否有什么不同。然后我放弃了,做了一个SO搜索:“remove_if和partition都将“good”元素放在第一位。partition将“bad”元素放在第二位,而remove_if没有指定后面是什么——它可能是bad元素,但也可能是任何(good或bad)元素的副本。”我没有意识到它们有多相似。