algorithm - 按此向量中的映射成员对对象向量进行排序
问题描述
我想我有一个非常简单的问题,但是......我必须通过它自己的成员对向量进行排序,但我不能。
这是我用另一个向量中的对象填充向量的函数。我必须按特定产品对向量 SortDealers 进行排序,但我不知道如何将 Stock 的名称发送给我的重载运算符<
void CShop::sortVector(const CStock& s1)
{
vector<CDealer> SortDealers;
vector<CDealer* >::iterator it = Dealers.begin();
while (it != Dealers.end())
{
if ((*(*it)).ComapareNameProducts(s1))
{
SortDealers.push_back(*(*it));
}
it++;
}
sort(SortDealers.begin(), SortDealers.end());
copy(SortDealers.begin(), SortDealers.end(), ostream_iterator<CDealer>(cout, "\n"));
}
这是重载运算符<:我必须按地图的无符号成员排序。
bool CDealer::operator<(const CDealer & o1)
{
unsigned res1 = 0;
unsigned res2= 0;
map<const CStock, pair<unsigned, double>>::const_iterator it = Stock.begin();
map<const CStock, pair<unsigned, double>>::const_iterator iter = o1.Stock.begin();
while (it != Stock.end())
{
res1 += it->second.first;
it++;
}
while (iter != o1.Stock.end())
{
res2 += iter->second.first;
iter++;
}
return (res1 < res2);
}
解决方案
您可以使用函子:
class less_than
{
const string stockname;
public:
less_than(string s) : stockname(s) {}
inline bool operator() const (const CDealer& a, const CDealer& b)
{
// use stockname here
}
};
sort(SortDealers.begin(), SortDealers.end(), less_than("name"));
您也可以使用 lambda 表达式在其捕获中提供股票名称。
推荐阅读
- scala - 测试 Akka-http 并出现错误:没有类型的隐式参数:Emptiness[Seq[Rejection]]
- angular - 如何使侧导航的图标响应并与我的侧导航的宽度完全匹配?
- python - 序列项 0:预期的 str 实例,找到 bool (Odoo 14)
- python - send_message 不为 pytelegrambotapi 发送消息
- python - 如何将文件作为表单字段输入而不将其定义为 Django 中的模型?
- reactjs - MS Teams 选项卡在部署后不工作但在开发模式下工作
- javascript - 将 HTML 表单下载为 PDF 文件
- javascript - 根据 Bootstrap 中轮播的图像更改显示的文本
- node.js - SockitIO 不断被 cors 政策阻止
- java - 求 List 相同位置的每个列表项的平均值
- >