C++ 不确定要使用什么数据结构

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

我目前正在尝试处理结构的向量/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 == 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)元素的副本。”我没有意识到它们有多相似。