1

私はそれを前進させる方法を知っています:

for(auto it = mmap.begin(), end = mmap.end(); it != end; it = mmap.upper_bound(it->first))

しかし、これは機能しません:

for(auto it = mmap.rbegin(), end = mmap.rend(); it != end; it = mmap.lower_bound(it->first))

与える: error: no match for 'operator=' in 'it = mmap.std::multimap<_Key, _Tp, _Compare, _Alloc>::lower_bound<unsigned int, long int, std::less<unsigned int>, std::allocator<std::pair<const unsigned int, long int> > >((* & it.std::reverse_iterator<_Iterator>::operator-><std::_Rb_tree_iterator<std::pair<const unsigned int, long int> > >()->std::pair<const unsigned int, long int>::first))'

4

1 に答える 1

3

Astd::multimap::iteratorは に直接変換できませんstd::reverse_iteratorstd::lower_boundのベース イテレータの結果を作成する必要がありitます。

typedef ... multimap_type;
typedef std::reverse_iterator<multimap_type::iterator> reverse_iterator;

for (auto it = mmap.rbegin(),
          end = mmap.rend();
     it != end;
     it = reverse_iterator(mmap.lower_bound(it->first)))
{
  // ...
}

式は、の結果をベース反復子としてreverse_iterator(mmap.lower_bound(it->first))を構築します。std::reverse_iteratorlower_bound

于 2013-03-23T21:34:59.840 に答える