0

マルチマップには が含まれていますmultimap<int,Questions*> map;。次の方法を使用してマップを印刷しようとしています。

Questions* Questions::printQuestion(int level)
{
    multimap<int, Questions*>::iterator it;
    pair<multimap<int, Questions*>::iterator,multimap<int, Questions*>::iterator> ret;

    ret = map.equal_range(level);
    if(ret.first != ret.second)
    {
    size_t sz = distance(ret.first, ret.second);
    size_t idx = rand() % sz;
    advance(ret.first, idx);
    it =ret.first;
    return (*it).second;
    }
    else
    {
        return NULL;
    }
}

しかし、メソッドは何もしません。誰でもこれで私を助けることができますか?

4

1 に答える 1

0

この関数は何も出力しません。Questions*指定されたレベルのすべての問題からランダムに選択された a を返します。したがって、レベル 5 の質問が 3 つある場合、 を呼び出すとprintQuestion(5)、それら 3 つのうちのランダムな質問へのポインターが得られます。この関数で選択された質問を印刷したい場合は、次のようにする必要があります。

Questions* question = (*it).second;
std::cout << question->getText() << std::endl;

getText()質問を印刷するために必要なものに置き換えます。

関数を呼び出して質問を出力するクライアントが必要な場合は、次のようにします。

Questions* question = printQuestion(5);
std::cout << question->getText() << std::endl;

ところで、クラスに複数形の名前を付けることはあまり一般的ではありません。Questionの代わりにクラスを呼び出すと、コードが読みやすくなりますQuestions

于 2012-12-18T21:25:11.280 に答える