2012-05-29 59 views
2

我有一个队列。如果它超过X大小,当我推入一个元素时,我想删除队列的第一个元素。 (最后一个元素,将得到弹出并且第一个元素推入)从队列中删除第一个元素?

void ClientPlayerManager::queueTableMessage(const std::string& playerName, const std::string& message) 
{ 
    m_tableQ.push(std::make_pair(playerName,message)); 

    if(m_tableQ.size() > m_maxTableMessages) 
    { 
     //m_tableQ.pop_back(); does not exist 
    } 
} 

有没有办法用一个std队列做到这一点?

感谢

+0

在FIFO队列中,将弹出的最后一个元素位于推入的第一个元素的另一端,您想要哪一个? –

+0

是的,这很混乱。为什么不使用push and pop来忘记它? –

回答

4

您可以使用std::deque代替std::queue,支持push_frontpush_backpop_frontpop_back。这也允许整个随机访问,但你可以忽略它并将deque视为双端队列。 (实际上,deque是双端队列的缩写)。

希望这会有所帮助!

+0

是的,这就是我需要的。谢谢。 – jmasterx

0

如果你想从另一端从什么pop删除元素呢,就跳过推动它摆在首位:

if(m_tableQ.size() < m_maxTableMessages) { 
    m_tableQ.push(std::make_pair(playerName,message)); 
} 
+0

不,这个想法是,我希望排在前面的X条消息,当我有X条消息时,最不重要的条目(最老的条目)和新条目中的一条进入。 – jmasterx

+0

@Milo:在这种情况下,您可以只需使用'pop'。 –

0

Here是另一种方式来做到这一点。使用基于STL的队列实现。

+0

对不起,但我不明白这是如何回答这个问题的。据推测,OP已经在使用'std :: queue',但想从中删除最后一个元素,这不是'std :: queue'自然支持的元素。 – templatetypedef

相关问题