電子書籍の厳選無料作品が豊富!

C++標準ライブラリ map の使用法に関して質問させてください。

winXP, minGW環境最近でC++のプログラミングを始めました。

これまでperlを使っており、とくにハッシュを多用していました。
たとえば入力ファイルに区切りのついたデータがあり、区切りごとに個別のハッシュをつくり、ハッシュのリファレンスの配列を作成します。その後に配列にはいったすべてのリファレンスからハッシュを呼び出して、ハッシュのデータをつかって処理を行う などです。

*入力ファイルから区切りごとにハッシュ%hashを作成
$ref_of_hash = \%hash;
push (@array_hash, $ref_of_hash);
*ここまでは入力ファイルにしてループ処理

foreach $ref ( @array_hash){   
  %hash_again = %$ref;
*ここでハッシュをつかって処理を行う。
}

c++の標準ライブラリにmapがあり、ハッシュとは多少異なるとはいえ、私の使用用途には問題なかったので使い始めました。ですが、マップのポインタをつかった上記のような処理の方法がわからず困っています。
1)mapのポインタから mapの各要素を呼び出すにはどのようにしたらよいでしょうか?
2)mapのポインタをつかった場合
map<double,double>::iterator it;
for( it = my_map.begin(); it != my_map.end(); it ++){
//do something}
のようなイテレータを使う場合、.begin .engはポインタを使ってどのように記述すればよいでしょうか。

3)このようなmapのポインタを利用したソースが書かれているサイトなどがあれば教えていただけないでしょうか。

C++をはじめて間もないので用語の間違いや勘違いがあるかもしれませんが、よろしくお願いします。

A 回答 (3件)

std::mapのキーにdoubleを使うのは賛成できませんが...



正攻法では、

template <typename Key, typename T>
struct f : std::unary_function<void, std::pair<void, std::pair<Key, Y> >
{
 void operator()(std::pair<Key, T> const& arg)
 {
  // 何らかの処理
 }
};

というファンクタを作っておいて..

std::map<double, double>* ptr = &my_map;
std::for_each(ptr->begin(), ptr->end(), f());

とします。

自分でループを書くのであれば、

std::map<double, double>* ptr = &my_map;
for (std::map<double, double>::const_iterator it = ptr->begin(), last = ptr->end(); it != last; ++it)
{
 double key = it->first;
 double value = it->second;
 // 何らかの処理
}

でよいでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ptr->begin()
でいけるわけですね。 ネットを検索してもなかなか解法がみつからず困っていたところです。早速試してみようと思います。

お礼日時:2009/01/19 06:34

> 以下すっごい挙げ足とりなんですけど, for_each の呼び出しで f にテンプレートパラメータは不要なんでしたっけ>#1.



すみません。修正忘れです。
他にも細かい間違いがありますが、まあいいでしょう。
    • good
    • 0

一般にポインタ p に対し


(*p).hoge と p->hoge
は同じ効果を持ちます.
以下すっごい挙げ足とりなんですけど, for_each の呼び出しで f にテンプレートパラメータは不要なんでしたっけ>#1.
    • good
    • 0
この回答へのお礼

ありがとうございます。
ポインタは勉強中なので勉強になりました。

お礼日時:2009/01/21 05:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!