在c ++中实现map <mpz_t,double =“”> </mpz_t,>

时间:2014-08-10 02:02:57

标签: c++ xcode map gmp

出于某种原因,我需要有一个从任意大数字到双重的地图,我试图用c ++ 98(我必须)和Xcode实现它,但它不起作用:

#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <set>
#include "gurobi_c++.h"
#include <sstream>
#include "boost/tuple/tuple.hpp"
#include "boost/tuple/tuple_comparison.hpp"
#include "boost/tuple/tuple_io.hpp"
#include <cmath>
#include <gmp.h>

using namespace std;
using namespace ::boost::tuples;
using namespace ::boost;

int main()
{
    map<mpz_t, double>J;
    mpz_t a,b,c,n;
    string tempstring;
    int xrange=5,yrange=5,component=5;

    mpz_set_str(n,"11", 10);
    J[n]=-1;

    return 0;
}

显示的错误是:数组初始化程序必须是初始化程序列表。有人可以帮我吗?谢谢:))

这是详细错误页面: enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

我不知道mpz_t的详细信息。但是,它似乎是一个数组。

您可以通过定义要用作地图中键的类来解决问题。

我可以使用以下代码使用g ++ 4.8.2创建可执行文件。

#include <map>
using namespace std;

typedef int (mpz_t)[2];

struct MyKey
{
   // Add a proper implementation of a constructor
   // with mpz_t.
   MyKey(mpz_t in) {}

   // Add a proper implementation of copy constructor.
   MyKey(MyKey const& copy) {}

   // Add a proper implementation of assignment operator.
   MyKey& operator=(MyKey const& rhs)
   {
      return *this;
   }

   bool operator<(MyKey const& rhs) const
   {
      // Add a proper implementation.
      return false;
   }

   mpz_t n;
};

int main()
{
   map<MyKey, double> J;
   mpz_t n;
   J[n] = 1.0;
   return 0;
}