【发布时间】:2013-11-23 22:07:03
【问题描述】:
c++ 大师:
有很多有用的 c++ stl 算法,例如 find 或 search。但是,它们似乎只返回一个交互器。
如果我想为 STL 容器执行 SQL 样式的“选择”怎么办?比如说,一个向量(可能扩展到列表或地图)。像
std::pair<vector::iterator, vector::iterator> select(std::vector::iterator begin, std::vector::iterator end, Comparor equal_to)
输出应该是一个范围,类似于 std::pair,类似于 boost::multi-index 中方法的返回值
在stl中有这样的东西吗?或任何类似的实体库?
【问题讨论】:
-
如果子集不是连续的子范围怎么办?
-
标准库中没有这样的东西。一种选择是 boost::Range,特别是 boost::range::filtered
-
@KerrekSB 输出元素通常应该是不连续的
-
@ccfenix:如果输出元素不连续,那么您到底如何期望一对
vector::iterator对象告诉您它们不在整个向量中?实现这一点的唯一方法是将相等的元素复制或移动到向量的连续部分中,您在其他地方说过这太昂贵了。 -
@Steve 我应该更具体地解释我的问题:我希望输出是迭代器的容器,而不是深度复制对象的容器(这将是巨大的)