Sorting vector objects with accessor

时间:2017-09-08 14:52:19

标签: c++ visual-c++

This is part of a C++ program based on the Alternative Vote electoral method, using VS2015. I have a class for Party

#pragma once
#ifndef _PARTY_H
#define _PARTY_H

#include <string>

class Party {
public:
    Party();
    ~Party();
    Party(std::string n, int pos);

    void reset();
    void upTotal();
    int getPosition();
    std::string getName();
    int getVotes();


private:
    std::string name;
    int votes;
    int position;
};

#endif

and

#include <iostream>
#include "Party.h"

using namespace std;

Party::Party() {}

Party::~Party() {}

Party::Party(string n, int p) {
    name = n;
    position = p;
}

void Party::reset() {
    votes = 0;
}

void Party::upTotal() {
    votes += 1;
}

int Party::getPosition() {
    return position;
}

string Party::getName() {
    return name;
};

int Party::getVotes() {
    return votes;
}

I tried to sort on votes received using (calculated from ballot papers elsewhere in the program

void sortParties() {
    sort(parties.begin(), parties.end(), [](const auto& a, const auto& b)
    {
        return a.getVotes() < b.getVotes();
    });
}

which returned illegal operand errors. Moving the variables from private to public and writing the following did work

void sortParties() {
    sort(parties.begin(), parties.end(), [](const auto& a, const auto& b)
    {
        return a.votes < b.votes;
    });
}

which gets it working, but I want to write it with proper encapsulation using private variables and an accessor for votes. Do I need to overload somehow, or convert type?

1 个答案:

答案 0 :(得分:1)

您已定义以下功能:

int getPosition();
std::string getName();
int getVotes();

它们应该都是常量;即

int getPosition() const;
std::string getName() const;
int getVotes() const;

这将允许您从

的const对象中调用函数
sort(parties.begin(), parties.end(), [](const auto& a, const auto& b)