2009-04-08 20 views
17

gcc C++のマップを逆に反復するのに問題があります。逆の反復子を使うと、何かを割り当てることができないようだ。コンパイラは不平を言う。私は順方向イテレータを使用していくつかの厄介なコードでそれを回避しようとしていますが、あまりエレガントではありません。何かご意見は?C++のマップを逆に反復する方法

+0

あなたが話してくれなかったことは、あなたがしたいことです。 – tpdi

+0

リバースイテレーターを使用していても、rbeginとrendではなくbeginとendを呼び出しているようなサウンドです。 GManのソリューションは、あなたが探しているものかもしれません。しかし、いくつかのコードを投稿すると、私たちがあなたを助けるのに役立ちます。 – Smashery

+0

ありがとうございました - 私はrbegin/rendを試したと思っていましたが、なんとか自分が絡んでいるはずです。 –

答えて

36

はここstd::mapを逆方向に反復処理の例です:

#include <iostream> 
#include <map> 
#include <string> 

int main() { 
    std::map<std::string, std::string> m; 
    m["a"] = "1"; 
    m["b"] = "2"; 
    m["c"] = "3"; 

    for (auto iter = m.rbegin(); iter != m.rend(); ++iter) { 
     std::cout << iter->first << ": " << iter->second << std::endl; 
    } 
} 

あなたは事前にC++ 11であれば、あなたがある、autoを綴るするだけ必要があります:

std::map<std::string, std::string>::reverse_iterator 

ブーストを使用している場合は、逆アダプタで範囲ベースのforループを使用できます。

#include <boost/range/adaptor/reversed.hpp> 

for (auto& iter : boost::adaptors::reverse(m)) { 
    std::cout << iter.first << ": " << iter.second << std::endl; 
} 
+0

typenameは必要ありません –

+0

最近、私はテンプレート化されたものをたくさん書いてきました。 :X – GManNickG

+1

ここで 'auto'を使うことはできますか? – Chani

関連する問題