我应该使用哪个数据集
Which dataset should I use?
标题可能有点模糊,但我会很感激对当前问题的一些想法。
这是一个数据集:
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)内存中的最后一个好值。
相关文章:
- 在CRC-16 CCITT中将数据从二进制解码为文本,我应该输入一个码字,使用CRC生成器进行编码
- 我应该为地图使用哪种数据结构?(C++)
- 我应该使用多个角色还是一个角色,将实际属性推迟到将数据包装/公开为其属性的QObject
- 我应该使用什么样的数据结构来实现UPGMA
- 我将 c++ 矢量数据集转换为 c 数组.我将相同的数据集传递到一个应该给出相同输出的函数中
- 我应该如何在恒定长度的 STL 样式数据结构中实现max_size?
- 我应该使用类内发起器初始化静态常量数据成员还是在其类外的定义中初始化静态常量数据成员
- 如何从C 中的HDF5文件中读取属性名称和数据集名称,在这里我不知道HDF5文件中存在什么属性
- 我的神经网络只学习一些数据集
- 我的程序在尝试将数据集追加到类对象时遇到"Process returned -1073741819 (0xC0000005)"
- 我应该使用什么数据结构来对数据库/表进行建模
- 如何维护城市道路数据?(我应该使用什么数据结构)
- 当我使用STL集时,我应该超载==操作员吗?
- 我需要一个像堆栈一样的数据结构,但具有随机访问,但是,我应该实现什么
- 我应该如何共享数据结构
- 创建 Timer 类时,我应该使用什么数据类型来保存值?(C/C++)
- 我应该使用哪个数据集
- 读取前检查boost::asio套接字上的数据?或者我应该使用async_read()
- C++ - 3-D 数据结构 - 我应该使用指针向量还是向量向量
- 我如何在C++中存储这个数据集(我使用哪些容器)