L'efficacité de la STL priority_queue

J'ai une application (C++) que je pense que ce serait bien servi par un STL priority_queue. La documentation dit:

Priority_queue est un conteneur de l'adaptateur, ce qui signifie qu'il est mis en œuvre sur le dessus de certaines sous-jacent type de conteneur. Par défaut que le type sous-jacent est un vecteur, mais un type différent peut être sélectionné de manière explicite.

et

Files d'attente de priorité sont un concept standard, et peut être mis en œuvre dans de nombreuses façons différentes; cette implémentation utilise des tas.

J'avais déjà supposé que top() est O(1), et que push() serait un O(logn) (les deux raisons que j'ai choisi le priority_queue en premier lieu), mais la documentation ne confirme ni ne réfute cette hypothèse.

Creuser plus profond, les docs pour la Séquence concept de dire:

La complexité de l'élément unique d'insertion et d'effacement sont la séquence dépendante.

La priority_queue utilise un vector (par défaut) comme un tas, dont:

... prend en charge l'accès aléatoire à des éléments, de la constante de temps de l'insertion et de suppression d'éléments à la fin, et le temps linéaire de l'insertion et de suppression d'éléments au début ou au milieu.

Je suis en déduire que, à l'aide de la valeur par défaut priority_queue, top() est O(1) et push() est O(n).

Question 1: Est-ce correct? (top() accès est O(1) et push() est O(n)?)

Question 2: serais-je capable d'atteindre O(logn) efficacité sur push() si j'ai utilisé une set (ou multiset) au lieu d'un vector pour la mise en œuvre de la priority_queue? Quelles seraient les conséquences de cette mesure? Quelles sont les autres activités qui souffrent comme une conséquence?

N. B.: je suis inquiet à propos de l'efficacité dans le temps, ici, non pas de l'espace.