c++有效地从用户定义结构的向量中提取子集
C++ efficiently extracting subsets from vector of user defined structure
让我先声明一下,我的大部分背景都是函数式编程语言,所以我对c++相当陌生。
无论如何,我正在处理的问题是,我正在解析具有多个变量类型的csv文件。数据中的样例行如下所示:
"2011-04-14 16:00:00, X, 1314.52, P, 812.1, 812"
"2011-04-14 16:01:00, X, 1316.32, P, 813.2, 813.1"
"2011-04-14 16:02:00, X, 1315.23, C, 811.2, 811.1"
我定义了一个结构体来存储每一行。然后将它们分别存储在std::vector
现在我给出的例子是相当简化的,但实际的问题涉及到多次子集。
我最初的简单实现是遍历整个向量,创建由新向量定义的单个子集,然后对这些新创建的向量进行子集。也许更节省内存的方法是创建一个索引,然后将其缩减。
现在我的问题是,是否有一种更有效的方法,在速度/内存使用方面)通过这个std::vector
谢谢!
编辑:基本上我想要的输出分别是前两行和最后一行。另一件值得注意的事情是,通常数据集不像示例那样有序,因此Cs和p不会分组在一起。
我使用了std::partition。但它不是boost的一部分
如果你想要一个允许你在不同实例之间廉价移动元素的数据结构,你正在寻找的数据结构是std::list<>
和它的splice()
函数族
我知道您这样做本身没有麻烦,但您似乎关心内存使用和性能。
根据结构体的大小和csv文件中的条目数量,如果您不需要修改分区数据,则可以使用智能指针,以便不复制mystruct
对象:
typedef std::vector<boost::shared_ptr<mystruct> > table_t;
table_t cvs_data;
如果您使用std::partition(如另一位海报所建议的),您需要定义一个谓词,该谓词将shared_ptr
的间接性考虑在内。
相关文章:
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- 如何创建一个函数来提取向量内部字符串中的字段?
- 将不同类型的模板参数包提取到双精度向量中会产生警告
- 遍历对象向量,并找到与从文本文件中提取的对象匹配的变量
- 如何从多维向量中提取数据
- 在 C++ 中,仅使用递归来提取向量中的最大元素
- 将张量的"lower diagonal"映射到矩阵,作为将矩阵的下三角形部分提取到向量的推广
- C :如何将多个URL从网站HTML提取到向量
- 从向量中提取最小值、最大值和中位数的最有效方法是什么
- 制作一个对的向量,对其进行排序,然后从中提取向量
- 从元组中提取向量
- 读取文件后提取子向量时的C 错误
- 从坐标向量中提取坐标并保存到文件
- 将一个向量(从向量的一个向量中提取)分配给另一个向量时出错,运算符为
- 提取向量的其他元素
- 在向量中查找值,并从该位置提取子向量
- 使用 std::unique_copy 从向量中提取不区分大小写的唯一字符串
- 如何从Eigen中的索引向量中提取子向量(Eigen::Vector)
- 使用迭代器从向量中提取子向量
- 可视化地从c++向量中指定的索引中提取元素