c++ - std::sort doing lots of unnecessary swaps -


i have following code try lexicographical comparison of 2 simple vectors

class expensiveclass { public:   static int increment;   std::vector<int> bigvector;    expensiveclass() {     (int j = 0; j < 1 + increment; ++j)       bigvector.emplace_back(j);     ++increment;   }   expensiveclass(const expensiveclass& other) {     std::cout << "expensive copy constructor called!" << std::endl;     this->bigvector = other.bigvector;   } };  int expensiveclass::increment = 0;  bool sortfunc(const expensiveclass& a, const expensiveclass& b) {   bool ret = a.bigvector < b.bigvector;   if (ret == false)     std::cout << "need swap" << std::endl;   return ret; }  int main() {   std::vector<expensiveclass> vectorofvectors;   vectorofvectors.reserve(100);   (int = 0; < 100; ++i)     vectorofvectors.emplace_back();    std::cout << "start sorting.." << std::endl;   std::sort(vectorofvectors.begin(), vectorofvectors.end(), sortfunc); } 

and i'd know why std::sort doing lots of swaps on sorted vector?

i think we're getting dark corners of stl here. played code , discovered sortfunc() doesn't return true. because arguments being passed not in order. std::sort algorithm picks elements vectorofvectors out of order, i.e. index of a within vectorofvectors not guaranteed higher index of b. don't know how dig deeper created separate questions: https://stackoverflow.com/questions/30539898/counter-intuitive-behavior-of-stdsort

anyway, point made assumption on behavior of std::sort, that's implementation dependent.


Comments

Popular posts from this blog

Java 3D LWJGL collision -

spring - SubProtocolWebSocketHandler - No handlers -

methods - python can't use function in submodule -