gpt4 book ai didi

c++ - 在 x 次循环后退出 while 循环

转载 作者:行者123 更新时间:2023-11-28 07:43:24 25 4
gpt4 key购买 nike

我有两层 map ,第二层指向一个队列。我想从队列(以及 map )中提取一定数量的项目,但我似乎无法在正确的位置插入中断/返回/退出(我不确定在这种情况下使用哪个) .

这是代码:

#include <iostream>
#include <queue>
#include <map>

using namespace std;

int main()
{
typedef std::queue<int> MessageQueue;
typedef std::map<int, MessageQueue> PriorityMap;
typedef std::map<int, PriorityMap> ClientMap;

ClientMap clients;

int priorities = 7;

clients[10][1].push(1);
clients[10][1].push(2);
clients[10][5].push(3);
clients[10][7].push(3);

for (int j = 1; j<3; j++) //this determines how many times an element will be 'popped' from a queue
{
while (!clients[10].empty())
{
for (int i = priorities; i > 0; i--)
{
while (clients[10].find(i) != clients[10].end())
{
cout << "priority " << i << endl;
cout << clients[10][i].front() << endl;
clients[10][i].pop();

if (clients[10][i].empty())
clients[10].erase(i);

}

}

break; //I don't know where this should go in order for the while loop to stop executing after an element has been popped
}

}

return 0;
}

这个结果

priority 7
3
priority 5
3
priority 1
1
priority 1
2

但我想要的结果是

priority 7
3
priority 5
3

最佳答案

main 方法的上下文中,exitreturn基本上做同样的事情。两者都不建议在循环中间执行。

我的建议:

bool done = false;
for (...; ... && !done; ...)
{
while (... && !done)
{
...
done = true;
...
}
}

或者,在您的问题的上下文中:

int count = 2;
for (int j = 1; j<3 && count > 0; j++)
{
while (!clients[10].empty() && count > 0)
{
for (int i = priorities; i > 0 && count > 0; i--)
{
while (clients[10].find(i) != clients[10].end() && count > 0)
{
...
count--;
...
}
}
}
}

我知道您可以只执行 && count 而不是 && count > 0,但后者更具可读性。

关于c++ - 在 x 次循环后退出 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15378814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com