boost::transform_iterator in std::upper_bound 编译错误
boost::transform_iterator in std::upper_bound compile error
我有一个按z顺序(http://en.wikipedia.org/wiki/Z-order_curve)排序的节点列表。我正在尝试找到第一个大于zPosition的节点。iterTransform 对象采用迭代器并返回二进制位置表示形式(与 zPosition 类型相同)。这种类型可以通过路径Cmp进行比较
NodeIterT last = std::upper_bound(
boost::make_transform_iterator(begin, iterTransform), // return PathType
boost::make_transform_iterator(end, iterTransform),
zPosition,
pathCmp ); // takes two PathType arguments
编译时我得到
错误 C2440:"正在初始化":无法从"boost::transform_iterator <一元函数,迭代器,引用,值>"转换为"标准::_Vector_iterator<_Myvec>"
这个最小化的示例是否有任何错误,或者我需要提供更多代码?
std::upper_bound
返回一个transform_iterator
。添加.base()
以获取包装的迭代器类型:
NodeIterT last = std::upper_bound(
boost::make_transform_iterator(begin, iterTransform), // return PathType
boost::make_transform_iterator(end, iterTransform),
zPosition,
pathCmp ).base();
假设begin
和end
属于NodeIterT
类型,应该可以工作。
std::upper_bound
返回一个迭代器,其类型与作为参数给出的类型相同。因此,在您的情况下,返回类型是 boost::transform_iterator<...>
而不是 std::vector<...>::iterator
。
如果要访问底层迭代器,可以使用 base()
成员函数:
NodeIterT last = std::upper_bound(
boost::make_transform_iterator(begin, iterTransform), // return PathType
boost::make_transform_iterator(end, iterTransform),
zPosition,
pathCmp ).base(); // note the call to base()