gpt4 book ai didi

c++ - zip_iterator 和 lower_bound

转载 作者:太空狗 更新时间:2023-10-29 20:44:13 27 4
gpt4 key购买 nike

我不知道如何用 zip_iterator 调用 lower_bound

这不会编译:

#include <boost/iterator/zip_iterator.hpp>
#include <vector>
#include <algorithm>

void main()
{
typedef int Key;
typedef double Value;

typedef boost::tuple<typename std::vector<Key>::iterator,
typename std::vector<Value>::iterator> the_iterator_tuple;
typedef boost::zip_iterator<the_iterator_tuple> the_zip_iterator;

std::vector<Key> keys_;
std::vector<Value> values_;

// Add values to keys_ and values_...

auto it = std::lower_bound(
the_zip_iterator(the_iterator_tuple(keys_.begin(), values_.begin())),
the_zip_iterator(the_iterator_tuple(keys_.end(), values_.end())),
123,
[](const the_iterator_tuple & it, const int v) -> bool { return *boost::get<0>(it) < v; }
);

// Use "it"...
}

VS2010 说它“无法将参数 1 从 'int' 转换为 'const std::_Vector_iterator<_Myvec> &'”(对于相同的错误加上几十个其他东西),但它与一个模糊的 boost 有关: :tuple 构造函数,不使用给定的 lambda。

我做错了什么?

最佳答案

这看起来像是 VS2010 中的“概念检查”错误。

25.4.3.1 [下限]/p1:

Requires:: The elements e of [first,last) shall be partitioned with respect to the expression e < value or comp(e, value).

即只有*it < v是必需的。

upper_bound算法有相反的要求:v < *it .和 equal_range需要两个表达式都起作用。

关于c++ - zip_iterator 和 lower_bound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13480679/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com