I need to optimize some code that sorts a vector<pair<int, float >>a where the pairs needs to be sorted on the float value. The vector will have an length between 0 and 5. I’ve been googling and reading up on sorting methods in C++ but cannot find any benchmarks on sorting tiny data sets. For the system it’s important be as fast as possible as it’s used for a real time blob tracking system.
Kind regards,
Pollux
First, premature optimization is the root of all evil. That is, first benchmark your code and make sure the sorting is the one that’s actually taking the most time. If another part of your performance-critical code is taking 80% of the execution time, you will get drastic performance improvements optimizing that first.
Considering you have 5 elements, the point is pretty much moot. Any algorithm you use (except bogosort :D) should have a pretty much constant execution time, unless you run the algorithm a few hundred times per second, or more.
Second, provided you still want to optimize the search, if you know for sure you always will have 5 elements, the optimal method is by hard-coding the comparations (It can be proven mathematically that this method is optimal, providing a minimal number of executed operations in the worst case scenario – we had this as a laboratory application in university). The same applies if you have less than five elements, but the algorithm becomes prohibitive to write and execute if you have more than seven elements – the logic is convoluted to write and follow so your code will become difficult to maintain.
Let me know if you need help with writing the optimal hard-coded algorithm itself (though I think you should find the implementation and theory online).
If you do not always have five numbers (or for some reason want to avoid the hardcoded comparisions algorithm), use the sort provided by the library. This page concludes that the stl sort is optimal in terms of time (not only number of executed operations). I do not know what implementation was used for search.