let dequeue_with_key t = match Doubly_linked.remove_first t.queue with | None -> None | Some kv -> Table.remove t.table kv.key; Some (kv.key, kv.value)