Its default implementation `OrderedQueueListCompare` looks like,
```c++
struct OrderedQueueListCompare
{
template <typenameT>
bool operator() (const T & a, const T & b) const {
return a.event <b.event;
}
};
```
The typename T is actually the `EventQueue::QueuedEvent`. But since `OrderedQueueList` is used in the policies that are used to construct the EventQueue, it's not possible to specify the actual type in `OrderedQueueListCompare`, so here we use a template operator.
`EventQueue::QueuedEvent` is declared as,
```c++
struct QueuedEvent
{
EventType event;
std::tuple<Args> arguments;
};
```
`event` is the event sent to the queue.
`arguments` are the arguments that passed to `EventQueue::enqueue`.
<aid="a3_3"></a>
### Sample code
```c++
// First let's define the event struct. e is the event type, priority determines the priority.
struct MyEvent
{
int e;
int priority;
};
// The comparison function object used by eventpp::OrderedQueueList.
// The function compares the event by priority.
struct MyCompare
{
template <typenameT>
bool operator() (const T & a, const T & b) const {