нужна помощь с использованием вложенных циклов в C ++ - PullRequest
0 голосов
/ 11 октября 2019

Я работаю над симулятором двойного аукциониста, и мне нужен метод, который проверяет заявки на покупку и продажу, чтобы узнать, является ли цена покупки <цена продажи. есть 10 заявок на покупку, которые хранятся в векторе объектов, и 10 заявок на продажу. </p>

ниже я приложил свой код моего метода. я знаю, что могу иметь несколько циклов, которые проверяют одну заявку на покупку на все заявки на продажу.

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]);
        }
    }       
}   

Я хотел бы знать, могу ли я использовать вложенные для циклов и как я могу проверять каждую ставку на покупку для всех заявок на продажу вместо проверки, если цена buybid [0] равна

Ответы [ 2 ]

0 голосов
/ 11 октября 2019
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]);
        }
    }
}

Если у вас проблемы с вложенным циклом, это должно помочь. Я предполагаю, что два массива инициализируются где-то над функцией (хотя они действительно должны быть переданы в качестве параметров самой функции)

0 голосов
/ 11 октября 2019

Здесь отсутствуют некоторые детали. Может ли какая-либо заявка на покупку совпадать с заявкой на продажу, если условие выполнено? Вы можете использовать два вложенных цикла, чтобы сравнить одну цену с другой и пропустить индексы цен, которые уже совпадают (или эквивалент). Тем не менее, это не самый эффективный в N * M (квадратичное время).

Вы можете сортировать цены и постепенно идти по соответствующим векторам, сопоставляя цены по пути. Ваша сложность Nlogn для сортов, но вы проходите каждый вектор только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...