Я пытаюсь написать функцию, чтобы определить, находится ли данное число 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;
}
Вам не нужно повторять карту — это то, что 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()
метод, как это. С другой стороны, я обычно стараюсь избегать наследования от контейнерных классов и вместо этого использую делегирование.
Других решений пока нет …