Проблема в том, что вы сравниваете всю строку с ключом, поэтому счетчик увеличивается всякий раз, когда вся строка равна слову. Вместо этого попробуйте проверить, содержит ли строка слово.
if (temp.find(search) != std::string::npos) {
// contains the word
count++;
}
Обновление: если слово может появиться в каждой строке более одного раза, тогда вам следует рассмотреть возможность использования другого l oop:
int step = search.size();
int position = 0;
while((position = temp.find(search, position)) != std::string::npos) {
position += step;
count++;
}