QMap功能:检查它是否包含isbn数

时间:2013-04-19 10:27:04

标签: c++ qt qmap

我正在尝试编写一个函数来确定给定的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;
}

1 个答案:

答案 0 :(得分: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()方法。另外,我通常会尝试避免从容器类派生而是使用委托。