电路交换的数据结构?

时间:2012-04-27 23:27:16

标签: c++ data-structures maps

我想创建这样的东西:

我有一个模块可以为消息流执行类似“电路交换”的操作。也就是说,它有一个入口和多个出口。一旦消息到达输入端,就会根据某些逻辑选择一个输出端(逻辑在问题的上下文中并不重要)。检查在出口上是否有正在进行的消息传输(对于第一个消息,将不会有任何消息)。如果没有传输,则将消息发送到该输出端口,否则,它将保留在该特定输出端口的队列中。我需要决定这种沟通的数据结构。请建议

我的想法是拥有一个出口和相应队列的地图。

queue<message> m_incoming_queue;
typedef map<outport*,m_incoming_queue> transaction_map

如果这是一个很好的解决方案,我想知道如何在运行时创建队列?因为,我事先并不知道会有多少出口,我会根据要求创建出口。

1 个答案:

答案 0 :(得分:0)

可能是这样的:

// At beginning
typedef queue<message> MessageQueue
typedef map<outport*, MessageQueue> transaction_map
transaction_map tm()  // Create the transaction map


// On receipt of each message
// (Some logic that determines outport* op and message m)
if(tm.count(*op) == 0)
{
    // There are no queues yet, create one and insert it
    tm.insert(transaction_map::value_type(*op, MessageQueue()))
}
// There is already a queue created, so add to it
tm[*op].push(m)