2016-12-16 6 views
0

std::map<int, X>のある点をupper_bound経由で見つけ、この時点から逆向きに繰り返します。戻り値をupper_boundからreverse_iteratorに代入

MAP::reverse_iterator iter; 

iter = _map.upper_bound(value); // Does not compile because upper_bound is not reverse_iterator 

while(iter != rbegin()){ 
    // logic 
    --iter; 
} 

UPPER_BOUNDは()reverse_iteratorを返さないので、私はコンパイルエラーを取得:私のコードは次のように見えます。

これを改善するための最良の方法は何ですか? _map.rend()、ない_map.rbegin()に到達したときに、あなたが持っている

auto iter = _map.upper_bound(value); 
for (std::reverse_iterator<decltype(iter)> rit{iter}; rit != _map.rend(); ++rit) { 
    // Do whatever you want... 
} 

注意を停止し、そしてあなたはそれをデクリメントない、逆反復子をインクリメントする必要があります。

+2

イテレータを逆イテレータに変換しますか? – NathanOliver

+0

@NathanOliverは、それが可能であることに気づかなかった。あなたが答えとしてそれを置くなら、私は受け入れます。 – user997112

答えて

0

あなたが逆のイテレータに、あなたのイテレータを変換する必要があります。

+0

これはC++ 14またはC++ 11ですか? GCC4.8.2でコンパイルエラーが発生してstd :: reverse_iterator rit {map.upper_bound(10)}; – user997112

+0

@ user997112これはC++ 11でも有効です。 – Holt

関連する問題