1

mpz_tキーからuint値へのマップを作成しようとしています。理由はわかりませんが、mpz_tどうにかしてキーをマップで検索できません。

mpz_t leftSideValues[1 << 20];

int main()
{
    std::map<mpz_t, uint> leftSide;

    for (uint i = 0; i < 1 << 20; i++)
    {
        mpz_init(leftSideValues[i]);

        // compute some stuff here...

        // now save the computed value to our map
        leftSide[leftSideValues[i]] = i;

        // do a lookup to see whether our value can be found
        std::cout << leftSide.at(leftSideValues[i]) << " -- " << i << std::endl;
    }

    return 0;
}

予想される出力は、「0 -- 0」、「1 -- 1」などのように見える多くの行ですが、そうはなりません。その代わり:

「std::out_of_range」のインスタンスをスローした後に呼び出される終了
  what(): map::at

mpz_tマップで使用できるようにするために他に必要な手順はありますか?

4

1 に答える 1

1

2 つのインスタンスmapを比較できないようです。mpz_t

C++ リファレンスマップによると、二分探索ツリーとして実装されます。したがって、要素を比較できない場合、検索は不可能です。

比較子を追加すると、この問題が修正されました。

struct mpzCompare
{
    bool operator() (const mpz_t val1, const mpz_t val2) const
    {
        return mpz_cmp(val1, val2) > 0;
    }
};

std::map<mpz_t, uint, mpzCompare> leftSide;
于 2013-07-31T13:53:33.683 に答える