Как распечатать значение из вектора классов в С++

Определен

class Word
{
private:
    std::string word;
    std::string meaning;
public:
    // все get 
    // перегружаю оператор ==

    friend bool operator==(const Word& w1, const Word& w2)
    {
        return (w1.word == w2.word);
    }
    // перегружаю оператор <
}

Внутри main:

vector<Word> d;
// добавляю слово
// сортирую
// поиск слова и печать этого слова

void findWord(vector<Word>& d, std::string k)
{
    SortWord(d);
    std::vector<int>::iterator it;

    it = find(d.begin(), d.end(), key);
    if (it != d.end())
        std::cout << "Element found in d: " << *it << '\n';
    else
        std::cout << "Element not found in d\n";
}

Выдает ошибку:

Severity Code Description Project File Line Suppression State Error (active) E0349 no operator "=" matches these operands

и

no operator "!=" matches these operands

Подскажит, как лучше найти слово из класса в векторе и распечать всю информацию об этом слове?


Ответы (1 шт):

Автор решения: Harry

Ваш оператор сравнения для работы find должен сравнивать не два Word, а Word со строкой:

friend bool operator== (const Word& w1, const string& w2)
{
   return (w1.word == w2);
}

И, кстати, написать проще

auto it = find(d.begin(), d.end(), key);

не упоминая итератор явным образом.

И раз уж вы пишете

std::cout << "Element found in d: " << *it << '\n';

то вам явно нужен еще один оператор -

ostream& operator << (ostream& os, const Word& w)
→ Ссылка