我有一个(指向)对象的向量 - 人。我有一个能增加收入的功能。我遇到的问题是找到一个人并访问addInc
。我有时会对指针/引用感到困惑,更重要的是我是OOP的新手。相关功能是:
bool Population::Income(const string &id, unsigned int amount) {
Person *Candidate = new Person(id);
//find company using lower_bound
iterPeople = lower_bound(m_People.begin(), m_People.end(), Candidate, cmpId);
if ( iterPeople != m_People.end() && (*iterPeople)->m_id == id ) {
*(iterPeople)->addInc(amount);
//request for member 'addInv' in...maybe you meant to use '->'?
delete Candidate;
return true;
}
delete Candidate;
return false;
其余代码为HERE。我有两个问题:
如何解决addInc
问题?
关于lower_bound
搜索 - 该方法适用于NewPerson
或CancelPerson
,但Income
会被称为A LOT。这种方法足够快吗?有什么方法可以提高效率吗?
BONUS - addInc
也来MedianNetworth
,它返回所有成功添加的Income
的中位数。使用它的有效方法是创建两个堆(最小和最大)。我的初步计划是make_heap
课程中的Population
:
make_heap(m_Audits.begin(), m_Audits.end(), cmpInt);
但是由于unexpected '(' token
,我无法在类中创建堆 - 在main()
或任何函数内部使用相同的语法。我究竟做错了什么?显然,我不想在函数内部创建堆,因为每当我想添加一个条目时,我都必须创建一个新的堆。