2016-03-28 12 views
0

私は何をすべきか分かりません。私は STLループのみで地図値を印刷する

は、ここではそれが本当に必要ならない限り、私はむしろ自分自身を別の関数を宣言していないと思い、私のマップ std::map<std::string, Borrowed*> map;

だ..私は、ループなどwhileループのために使用することはできません、唯一のSTLループとマップ値を印刷する必要があり私はfor_eachやコピー機能を使用してみましたが、それはあなたが使うべきものだ場合、私はあなたがSTLアルゴリズムを意味すると仮定すると、それらに

+0

私は論理的な方法で使用してみましたが、私はまた1 –

+0

をしたいと思いますが、私はそれをどのように使うのです:STD :: STDでコピー:: ostream_iterator –

+0

が表示されていない、私はあなたがDieterLückingいや、@のstd :: for_each –

答えて

0

を使用する方法が表示されない:ここで

はです

編集があることを行います(++ 11 C)例:

#include <algorithm> 
#include <iostream> 

std::for_each(map.cbegin(), map.cend(), 
    [&](const std::pair<std::string, Borrowed*> &pair) { 
    std::cout << pair.first // std::string (key) 
     << " " << pair.second->XXX // Borrowed* (value) or whatever you want to print here 
     << "\n"; 
}); 

http://en.cppreference.com/w/cpp/algorithm/for_each

+0

ありがとうございました!しかし私は&ここで何を&私たちを助けるのか分からない –

+0

ラムダでは使用していないので、変数 'map'をここでは捕捉していません。私たちは実際にここで '&'を省略することができます。[http://en.cppreference.com/w/cpp/language/lambda](http://en.cppreference.com/w/cpp/language/lambda) – foo

2

だけ(Borrowed*要素を印刷するための独自のコードを使用して、simplicitlyためmap<string, int>を使用して)要素を印刷ラムダとstd::for_eachを使用します。

#include <algorithm> 
#include <iostream> 
#include <iterator> 
#include <map> 

int main() 
{ 
    std::map<std::string, int> m = { { "bla", 1 }, { "yada", 2 } }; 
    std::for_each(m.begin(), m.end(), [](auto const& elem) { 
     std::cout << "{ " << elem.first << ", " << elem.second << "}, "; 
    }); 
} 

Live Example

注意これは、(パラメータの型を推定するautoで)C++ 14の一般的なラムダを使用します。 C++ 11では明示的に書く必要があり、C++ 98ではラムダの作業に独自の関数オブジェクトを記述する必要があります。