2016-12-23 11 views
0

std :: pair、mpfr_t>型の要素をマップに挿入する際に問題が発生します。私は、私は思っrec_func関数にmpfr_tオブジェクトへのポインタを渡しておりますので、STD :: make_pair関数は「[1] __mpfr_struct」に「__mpfr_struct *」の割り当てでマップ内のmpfr_tオブジェクトを値として挿入

互換性のない型

をエラーを呼び出します*演算子を使って逆参照し、その結果のmpfr_tをマップに値として保存することができます。

コードの背景情報と構造:rec_funcは再帰関数です。特定のインスタンスを数えることになっています。インスタンスの数が非常に多い(10^50以上)ので、データ型mpfr_tを使用しています。再帰関数が同じ引数で複数回呼び出されるのを避けるために、私は動的プログラミング(別名Memoization)を使いたいと思っています。この目的のために私は、3つの整数をキーとし、mpfr_tを値とするベクトルを持つマップを使用しています。

main関数は、マップとmpfr_t型のオブジェクトを初期化します。その後、rec_funcを呼び出し、マップとmpfr_tオブジェクトへのポインタを渡します。 mpfr_tは実際には配列型であるため、返すことはできません。したがって、ポインタを渡すだけです。

まず、gmpライブラリとmfprライブラリをインストールする必要があります。 須藤はapt-getはlibgmp3-devのインストール 須藤はapt-getをインストールlibmpfr-devのlibmpfr-docのlibmpfr4 libmpfr4-dbgの

アドバイスは非常に高く評価されるだろう。

typedef __mpfr_struct mpfr_t[1];

これは、あなたは、単にそれが(=を使用してコピーすることができないことを意味します

#include <map> 
#include <vector> 
#include <iostream> 
#include <gmp.h> 
#include <mpfr.h> 
using namespace std; 

void rec_func(std::map <std::vector<int>, mpfr_t>& my_map, mpfr_t* big_int) 
{ 

    int arr[3] = {1, 2, 3}; 
    std::vector<int> itm(arr, arr+3); 

    std::pair <std::vector<int>, mpfr_t> intr; 
    intr = std::make_pair(itm, *big_int); 
    //my_map.insert(intr); 

    //my_map.insert (std::make_pair(itm, *big_int)); 

} 

int main() 
{ 
    mpfr_t big_int; // initialize 
    mpfr_init2(big_int, 200); 
    mpfr_set_d(big_int, 1, MPFR_RNDN); // assign value 

    std::map <std::vector<int>, mpfr_t> my_map; 

    rec_func(my_map, &big_int); 

    mpfr_clear(big_int); // clear the big int 
    my_map.clear(); // delete the map 

} 
+0

とにかくC++を使っているのなら、おそらく 'mpfr_t'の代わりに' mpfr_class'を使うでしょうか? 'mpfr_t'はCの制限に対処するためにやや魔法ですが、同じ魔法のビット(' typedef'はサイズ1です)は、 'mpft_t'のような構造体の配列)は、C++のテンプレートスキームと衝突します。ここで' mpfr_class'にはこのような問題はありません。 – ShadowRanger

+0

ありがとう、これは私の問題を解決しました。 – fabianschroeder

答えて

0

mpfr_tタイプは、単純な構造体ではありませんが、実際には、mpfr.hヘッダーとして、それはサイズ1の配列ですそれはstd::make_pairのように)。

最も簡単な解決策は、mpfr_tへのポインタを使用してstd::pair(およびstd::map)に格納することです。

+0

ありがとう、問題解決済み:) – fabianschroeder

関連する問題