私は2つ持っていstd::vector<std::string>
ます。1 つはフィールド名を含みます。もう 1 つは対応する値を含みます。すべてのフィールド名/値のペアをboost::unordered_mapに挿入する最良の方法は何ですか?
確かに、ベクトルで 2 つの反復子を取得し、反復ごとに 1 つのペアを挿入してループスルーすることはできましたが、もっと簡単な方法はないかと考えました。
更新 1 : 追加情報: g++ 4.4を使用しているため、ほとんどの c++11 グッズにアクセスできません。
更新 2 : @chris の提案に基づいて、使用しようとしていますboost::iterator
。私が使用している Boost ドキュメントの例を次に示します。
std::vector<double>::const_iterator beg1 = vect_of_doubles.begin();
std::vector<double>::const_iterator end1 = vect_of_doubles.end();
std::vector<int>::const_iterator beg2 = vect_of_ints.begin();
std::vector<int>::const_iterator end2 = vect_of_ints.end();
std::for_each(
boost::make_zip_iterator(
boost::make_tuple(beg1, beg2)
),
boost::make_zip_iterator(
boost::make_tuple(end1, end2)
),
zip_func()
);
A non-generic implementation of zip_func could look as follows:
struct zip_func :
public std::unary_function<const boost::tuple<const double&, const int&>&, void>
{
void operator()(const boost::tuple<const double&, const int&>& t) const
{
m_f0(t.get<0>());
m_f1(t.get<1>());
}
private:
func_0 m_f0;
func_1 m_f1;
};
の定義まで理解できましたzip_func()
。どこにstruct
住むべきですか?何かを返す必要がありますか?なぜあるのoperator()
ですか?あまりにも多くのことが起こっていて、頭を整理することができません。私の問題では、どのようzip_func()
にフィールド名と値を抽出して挿入しunordered_map
ますか?