1

QMap特定の isbn 番号がリストに含まれているかどうかを判断する関数を作成しようとしていcontainsますが、適切に使用していないことがわかります。これが論理的に機能するかどうかはわかりません。

bool TextbookMap::foundTextBook(QString isbn) const {
    bool found = false;
    ConstIterator itr = constBegin();
    for ( ; itr != constEnd(); ++itr)
    {
         if (itr.contains(isbn))
             found = true;
    }
    return found;
}
4

1 に答える 1

5

マップを反復する必要はありません。これはcontains()既に行っていることです。単に使用する

bool TextbookMap::foundTextBook(const QString& isbn) const {
   return contains(isbn);
}

TextbookMap(私はあなたがから派生したと仮定しますQMap)

以下のコードが出力されます

false
true

class Textbook {
};

class TextbookMap : public QMap<QString, Textbook*> {
public:
    bool foundTextBook(const QString& isbn) const;
};

bool TextbookMap::foundTextBook(const QString& isbn) const {
    return contains(isbn);
}

int main(int argc, char ** argv) {
    TextbookMap map;
    map.insert("1234", new Textbook());
    map.insert("5678", new Textbook());
    qDebug() << map.foundTextBook("01234");
    qDebug() << map.foundTextBook("1234");

    return 0;
}

この例では、別のメソッドを実装する必要さえありませんmap.contains()。直接使用することもできます。contains()ただし、このようにメソッドをカプセル化することが理にかなっているのかどうかは、具体的な要件によって異なります。余談ですが、私は通常、コンテナー クラスからの派生を避け、代わりに委任を使用するようにしています。

于 2013-04-19T10:32:20.870 に答える