Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Определение элементов заданного приоритета в векторе структур c помощью средств STL

85K
18 февраля 2013 года
Black_Howk
6 / / 18.02.2013
Добрый день!

Пишу программу, где вектор состоит из структур, каждая из которых содержит два целых значения - приоритет (от 3 до 5) и число (случайное число от 50 до 100)
Необходимо с помощью стандартного алгоритма count сосчитать число элементов с определенным приоритетом. Например, с приоритетом, равным 3.
Пытаюсь реализовать с помощью предиката, но в момент построения происходит сбой и компиллятор требует перезагрузить оператор ==
(error C2678: бинарный "==": не найден оператор, принимающий левый операнд типа "myStruct" (или приемлемое преобразование отсутствует) )

При этом вхождение элементов в одну группу по их приоритету не означает их равенству. Да и желательно в учебных целях решить задачу с использованием предката.
Пробовала подсоединить в структуру геттер, возвращающий приоритет, но с тем же результатом.
Подскажите, пожалуйста, что не так в коде. И, если даже для использования предиката требуется перезагрузить ==, то должен быть он перезагружен для всей структуры или только поля приоритет?

Код:
#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);
}
360
18 февраля 2013 года
P*t*
474 / / 15.02.2007
count третьим параметром принимает не функцию, а константное значение.

Вам нужно вместо функции count использовать функцию count_if.
85K
18 февраля 2013 года
Black_Howk
6 / / 18.02.2013
Спасибо большое! Заработало)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог