Все члены класса Term
находятся под стражей private
, и, следовательно, вы даже не можете сделать из него экземпляр.Ваш учитель определенно пропустил / или хочет, чтобы вы выяснили это.
Кроме friend
члена, вы можете предоставить функцию получения, с помощью которой вы сможете получить к нему доступ.
class Term
{
private:
std::string _str;
unsigned long long int weight;
public:
// constructor needs to be public in order to make an instance of the class
Term(const std::string &s, long int w) : _str(s), weight(w) {}
// provide a getter for member string
const std::string& getString() const /* noexcept */ { return _str; }
};
int FindFirstMatch(const std::vector<Term>& records, const std::string &prefix)
{
for (std::size_t i = 0; i < records.size(); i++)
{
if (records[i].getString() == prefix) // now you could access via getString()
{
return i;
}
}
return -1; // default return
}
Или, если вам разрешено использовать стандартные алгоритмы , например, используя std :: find_if и std :: distance .
( См. Live )
#include <iterator>
#include <algorithm>
int FindFirstMatch(const std::vector<Term>& records, const std::string &prefix)
{
const auto iter = std::find_if(std::cbegin(records), std::cend(records), [&](const Term & term) { return term.getString() == prefix; });
return iter != std::cend(records) ? std::distance(std::cbegin(records) , iter) : -1;
}