かずまさん
http://d.hatena.ne.jp/ponkotuy/20111216/1324027752
こちらのページによるとvectorをソートするよりpriority_queueに未ソートのvectorを渡してソートしてもらうほうが早いらしいです。(ほんとかどうかはしらない^^;)
今回はこちらのサイトを信用して先のようなコードにしました。
解決済みにするのを忘れていたので追加で質問をしたいと思います。
現在の私のプログラムでは学習を一回するごとに(mapの値を一回更新するごとに)先のコードを用いて枝刈しています。
しかし、それでは頭が悪そうです。(大量のコピーが学習回数分行われるため)
そこで枝刈の頻度を少なくしようと思いました。
最初は学習回数を指標に枝刈を行おうと思いましたが、極端な話、mapのサイズが1Byteだった場合はたとえ1000回学習したとしても1kB(1kじゃないだろ、とかいう突込みはなしで^^;)のメモリ消費で済みますし、1kBのmapを扱う場合は1000回学習すると1MBもメモリを消費してしまいます。
したがって、学習回数ではなくmapのメモリサイズを指標に枝刈を行おうと思いました。
しかし、ここでも問題が出てきてしまいました。
メモリをどれぐらい消費したら枝刈を行うか、プログラム上でmapのメモリサイズをどのように取得するか、という問題です。
今回の質問はこれらの解決策についてです。()の中はやりたいことです。
- PCの動作が遅くならない程度のメモリの確保の方法(mapのサイズが確保したメモリ以上になりそうだったら枝刈)
- マシンが扱える最大メモリを取得する方法(最大メモリのうち何割をmapに割くか、ユーザに入力させる)
- mapのメモリサイズを取得する方法(mapのメモリサイズを指標とするため)
さらにおおもとの質問として
というものも追加しておきます。
あと、しつこいようですが使用しているmapはgoogleのdense_hash_mapになります。
よろしくお願いします<(_ _)>