我有一个排序的结构数组。
我想在其上使用std::binary_search
或std::find
。
我看到的每个地方,都会找到一些示例,展示如何使用结构矢量来完成它。永远不会有一系列结构。我不确定是否必须使用谓词或重载=
运算符或什么。
如果我使用以下调用,那么std::find
的第三个参数必须是什么:
template< class InputIt, class T >
InputIt find( InputIt first, InputIt last, const T& value );
此外,它表示上述调用将返回Iterator或返回最后一个。这如何与结构一起使用。结构没有迭代器,是吗?
答案 0 :(得分:2)
如果要将其应用于数组[a, b)
的(有效)数组范围arr
,则InputIt
应为std::begin(arr) + a
,而OutputIt
应该std::begin(arr) + b
是b
。如果arr
等于OutputIt
中的元素数量,那么您也可以将std::end(arr)
设置为std::begin
。
std::end
和InputIt
调用类型为T的数组返回T *。因此,在数组上考虑这些函数时,您始终可以将T *替换为OutputIt
和std::find
。 last
返回一个InputIt。所以,你得到的是指向相应数组元素的指针。如果未找到任何内容,则返回{{1}}。