1

我正在尝试编写一个函数来确定给定的 isbn 编号是否在QMap列表中,我发现我没有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);
}

(我假设你已经TextbookMapQMap

下面的代码打印

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 回答