我正在研究双重拍卖人模拟器,因此我需要一种检查买入和卖出出价的方法,以查看买入价格是否小于卖出价格。 有10个买入买入价存储在对象向量中,还有10个卖出买入价。
下面我附上了我的方法代码。我知道我可以有多个循环来检查一个买入价到所有卖出价。
void match()
{
for (int i=0;i<buyBid.size();i++)
{
if (buyBid[0].price <= sellBid[i].price)
{
matchedBids.push_back(buyBid[0]);
matchedBids.push_back(sellBid[i]);
clearingPrice = (buyBid[0].price+sellBid[i].price)/2;
cout <<clearingPrice<<endl;
}
else
{
unmatchedBuyBids.push_back(buyBid[0]);
unmatchedSellBids.push_back(sellBid[i]);
}
}
}
我想知道是否可以使用嵌套的for循环以及如何使用,要检查所有卖出价的每个买入报价,而不是检查buybid [0]价格是否低于
答案 0 :(得分:0)
这里缺少一些细节。满足条件后,任何买入价都能与买入价相对应吗?您可以使用两个嵌套循环来检查一个价格与另一个价格,并跳过已经匹配(或等价)的价格索引。但是,这并不是N * M(二次时间)最有效的方法。
您可以对价格进行排序,并逐步遍历各个向量,一路匹配价格。排序的复杂度为Nlogn,但每个向量仅遍历一次。
答案 1 :(得分:-1)
for(int i = 0; i < sellBid.size(); ++i)
{
for(int j = 0; j < buyBid.size(); ++j)
{
if (buyBid[j].price <= sellBid[i].price)
{
matchedBids.push_back(buyBid[j]);
matchedBids.push_back(sellBid[i]);
clearingPrice = (buyBid[j].price + sellBid[i].price) / 2;
cout << clearingPrice << endl;
}
else
{
unmatchedBuyBids.push_back(buyBid[j]);
unmatchedSellBids.push_back(sellBid[i]);
}
}
}
如果它只是嵌套的for循环,您会遇到麻烦,那么这应该会有所帮助。我假设这两个数组是在函数上方的某个地方初始化的(尽管它们确实应该作为参数传递给函数本身)