#include <algorithm>
#include <iostream>
#include <vector>
#include <stdio.h>
#include <cmath>
#include <ctime>
using namespace std;
typedef struct
{
int prior; //может принимать значения 3,4,5
int number; //принимает значени от 50 до 100
int getPrior() const {return prior;}
} myStruct;
bool isPrior1(const myStruct& s)
{
return s.getPrior() == 3;
}
void main(void)
{
vector<myStruct> vec;
myStruct newStr;
int numberOfHighPrior;
srand(time(NULL));
for (int i=0;i<20;i++)
{
newStr.prior=rand()%3+3;
newStr.number=rand()%50+50;
vec.push_back(newStr);
}
numberOfHighPrior = count(vec.begin(),vec.end(),isPrior1);
}
Определение элементов заданного приоритета в векторе структур c помощью средств STL
Пишу программу, где вектор состоит из структур, каждая из которых содержит два целых значения - приоритет (от 3 до 5) и число (случайное число от 50 до 100)
Необходимо с помощью стандартного алгоритма count сосчитать число элементов с определенным приоритетом. Например, с приоритетом, равным 3.
Пытаюсь реализовать с помощью предиката, но в момент построения происходит сбой и компиллятор требует перезагрузить оператор ==
(error C2678: бинарный "==": не найден оператор, принимающий левый операнд типа "myStruct" (или приемлемое преобразование отсутствует) )
При этом вхождение элементов в одну группу по их приоритету не означает их равенству. Да и желательно в учебных целях решить задачу с использованием предката.
Пробовала подсоединить в структуру геттер, возвращающий приоритет, но с тем же результатом.
Подскажите, пожалуйста, что не так в коде. И, если даже для использования предиката требуется перезагрузить ==, то должен быть он перезагружен для всей структуры или только поля приоритет?
Код:
count третьим параметром принимает не функцию, а константное значение.
Спасибо большое! Заработало)