C++ Logo

std-discussion

Advanced search

Why is std::priority_queue so slow?

From: iSauron <isauron_at_[hidden]>
Date: Wed, 07 Jul 2021 13:15:50 +0000
Hi there!

As you can see in the subject, I post this message to know why is std::priority_queue slow.

As a background context, I am a computer engineer student and I wanted to develop some data structures for fun and improve my C++ knowledge and skills. I decided it would be fun and interesting to speed test them out with std implementations and..

I ran some tests (with stack, vector, queue, deque, priority_queue for now) where I push 480000000 elements onto the diferent data structures and pops them afterwards. I timed out the amount of time and time per call for push and pop implementations.

The results for the priority_queue tests are as follows:

Executed with a Intel Core i5-4210CPU 1.70GHz and 8Gb of RAM.
My priorityqueue implementation:
Total Push time: 0.53 seconds
Total Pop time: 0.94 seconds

STD implementation of priorityqueue
Total Push time: 11.90 seconds
Total Pop time: 147.205 seconds

Surprisingly, std::priority_queue is very slow compared to other std implementations, I ran many tests and I don't know if I'm doing things right, am I missing something? If not, why is it so slow? Is it implemented as a linked list of nodes? If so, why?

You can check out the code and tests I ran here https://gitlab.com/iSauron/cpp-utils, you can also run the tests by executing:

- make all
- ./stress.test

The priority queue might be a little confusing to find out in my implementation, it is called heap. It is located in file src/ads/heap.hpp, in the definition of class MinHeap, you can find out push and pop implementations for the priority_queue.

Thank you in advance for taking the time to read this
Cordially, Isauro López Cortegano

Sent with [ProtonMail](https://protonmail.com/) Secure Email.

Received on 2021-07-07 08:15:58