我正在尝试编写一个函数来确定给定的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;
}
答案 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()
方法。另外,我通常会尝试避免从容器类派生而是使用委托。