您需要更新向量元素的数据。为此,我使用了一个函数find
并通过比较find_id
,但编译器给出了一个错误:
...xutility(5112,21): error C2676: binary '==': 'Solder' 未定义此运算符或转换为内置运算符可接受的类型
...xutility(5147): message : выполняется компиляция ссылки на экземпляр шаблон функции "_InIt
std::_Find_unchecked1<_InIt,_Ty>(_InIt,const _InIt,const _Ty
&,std::false_type)"
with
1> [
1>
1> _InIt=Solder *,
1> _Ty=find_id
1> ]
在找到元素之后,我们通过它的方法更新它的数据。士兵的等级减少了,只剩下必要的了。在组类中,values
是一个带有数字的向量,该数字是类中的一个字段Solders
和一个名称number
。
class Solder
{
private:
int counterForUpdate;
string* name;
public:
int number;
//конструктор
Solder(string name_in = "Неизвестно", int number_in = 0)
{
name = new string(name_in);
number = number_in;
}
void update(int counter){
counterForUpdate = counterForUpdate + counter;
}
};
struct find_id : std::unary_function<Solder, bool> {
int number;
find_id(int id) :number(number) { }
bool operator()(Solder const& ms) const {
return ms.number == number;
}
};
class Group
{
private:
std::vector<Solder> solders;
public:
void addSolder(string name, int number)
{
Solder newSolder(name, number);
solders.push_back(newSolder);
}
void updateStates(int count, int result, std::vector<int> values)
{
std::vector<Solder>::iterator it;
for (vector<Solder>::size_type i = 0; i != count; i++)
{
it = std::find(solders.begin(), solders.end(), find_id(values[i]));
if (result == 0)
{
it->update(0);
}
else
{
it->update(2);
}
}
}
};