用反向_iterator stl错误解密upper_bound



编译器到底是什么意思:

c:usrmingwbin../lib/gcc/mingw32/4.6.2/include/c++/bits/stl_algo.h:
In function 
'_FIter std::upper_bound(_FIter, _FIter, const _Tp&)
[
  with _FIter = std::reverse_iterator<
    __gnu_cxx::__normal_iterator<ModelItem*, std::vector<ModelItem> > >,
    _Tp = Model::close_active(int)::<lambda(const t_item&)>
]':
model.cpp:58:3:   instantiated from here

c:usrmingwbin../lib/gcc/mingw32/4.6.2/include/c++/bits/stl_algo.h:2461:4:
error: no match for 'operator<' in
'__val < __middle.std::reverse_iterator<_Iterator>::operator*
[
  with _Iterator =
    __gnu_cxx::__normal_iterator<ModelItem*, std::vector<ModelItem> >,
     std::reverse_iterator<_Iterator>::reference = ModelItem&
]()'

为此代码的平静:

t_itemlist::reverse_iterator rit = std::upper_bound(
  m_itemlist.rbegin(), m_itemlist.rend(),
  [&at](const t_item& item){ return item.at > at; }
);

我想使用反向迭代器。

(所以表格要求我添加更多的详细信息,因为问题的代码太多了。但是我不知道该说些什么。)

upper_bound的3个参数版本不期望比较功能,而是所需的值作为其第三个参数。

比较函数必须具有两个参数,因为它取代了operator<,即二进制运算符。

疯狂的猜测:

auto rit = std::upper_bound(m_itemlist.rbegin(), m_itemlist.rend(), at,
    [](auto const& at, auto const& item) { return at < item.at; });

最新更新