Функция QMap: проверьте, что она содержит номер isbn

Я пытаюсь написать функцию, чтобы определить, находится ли данное число 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

Решение

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

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]