我应该使用哪个数据集

Which dataset should I use?

本文关键字:数据集 我应该      更新时间:2023-10-16

标题可能有点模糊,但我会很感激对当前问题的一些想法。

这是一个数据集:

1   1/1/2013
2   1/1/2013
3   1/1/2013
1   1/2/2013
2   1/2/2013
1   1/3/2013
2   1/3/2013
3   1/3/2013

所以,我从第一张唱片开始,看看我的列表中是否还有1张。如果有,我忽略它,然后返回第二个记录。如果我的列表中还有2个,我会忽略它,然后回到第三个记录,以此类推。

现在,我正在寻找的这个列表的期望结果是<1,2013年1月3日>,因为它下面不存在1的其他记录。

类似地,在这个数据集中:

1   1/1/2013
2   1/1/2013
3   1/1/2013
1   1/2/2013
2   1/2/2013
3   1/2/2013
4   1/2/2013
1   1/3/2013
2   1/3/2013
3   1/3/2013

期望的结果将是<4,2013年1月2日>,因为列表中没有出现其他4。

我的问题是,我该怎么做,我可以使用什么标准的STL容器?此外,这些是查询返回的结果。

很抱歉,我没有使用boost或任何其他库,并希望用std变量来完成这项工作。

您可以使用两个映射-一个映射存储从键(您的第一列)到值(您的第二列)的映射,另一个映射保存从键(第一列)至记录号的映射:

std::map<int, std::string> m1;
std::map<int, int> m2;
int counter = 0;
while (...)
{
  <...get record...>
  m1[record.key] = record.value;
  m2[record.key] = counter++;
}

然后,您需要扫描第二张地图m2,以找到位置最小的钥匙:

int keyMin = <...big number...>, posMin = <...big number...>;
for (std::map<int, int>::const_iterator it = m2.begin(); it != m2.end(); ++it)
{
  if (it->second < posMin)
  {
    keyMin = it->first;
    posMin = it->second;
  }
}

结果将是第一把钥匙,目前还没有这把钥匙的记录。使用此键和第一个映射m1,您将能够找到其相应的值。

您可以从底部进行检查,并记住每个索引的第一个(从顶部计数时为最后一个)外观。在你完成这件事之后(在时间O(n))你可以拿走你找到的最后一个。

查询返回什么?如果返回已知结构,则可以选择std::vector<some-structure>;如果返回字符串列表,则选择std::vector<std::vector<std::string> >。然后从底部开始,记住你看到的所有唯一的id,你就可以获得o(n)时间和o(n)内存中的最后一个好值。

相关文章: