#include <iostream>
#include <vector>
#include <algorithm>
int swapCount = 0;
class X
{
public:
int x;
X( int val ): x( val ) {};
friend void swap( X &a, X &b )
{
using std::swap;
swap( a.x, b.x );
swapCount++;
}
};
int main() {
std::vector<X> vec;
for ( int i = 0; i < 100; i++ )
{
vec.push_back( X( i ) );
};
std::cout << "swapCount=" << swapCount << "\n";
std::sort( vec.begin(), vec.end(),
[] ( const X &a, const X &b ) -> bool { return (a.x) < (b.x); } );
std::cout << "swapCount=" << swapCount << "\n";
std::sort( vec.begin(), vec.end(),
[] ( const X &a, const X &b ) -> bool { return (a.x) < (b.x); } );
std::cout << "swapCount=" << swapCount << "\n";
std::sort( vec.begin(), vec.end(),
[] ( const X &a, const X &b ) -> bool { return (a.x) < (b.x); } );
std::cout << "swapCount=" << swapCount << "\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKaW50IHN3YXBDb3VudCA9IDA7CgpjbGFzcyBYCnsKcHVibGljOgoJaW50IHg7CgkKCVgoIGludCB2YWwgKTogeCggdmFsICkge307CgkKCWZyaWVuZCB2b2lkIHN3YXAoIFggJmEsIFggJmIgKQoJewoJCXVzaW5nIHN0ZDo6c3dhcDsKCQlzd2FwKCBhLngsIGIueCApOwoJCXN3YXBDb3VudCsrOwoJfQp9OwoKaW50IG1haW4oKSB7CglzdGQ6OnZlY3RvcjxYPiB2ZWM7Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCAxMDA7IGkrKyApCgl7CgkJdmVjLnB1c2hfYmFjayggWCggaSApICk7Cgl9OwoJc3RkOjpjb3V0IDw8ICJzd2FwQ291bnQ9IiA8PCBzd2FwQ291bnQgPDwgIlxuIjsKCQoJc3RkOjpzb3J0KCB2ZWMuYmVnaW4oKSwgdmVjLmVuZCgpLCAKCQlbXSAoIGNvbnN0IFggJmEsIGNvbnN0IFggJmIgKSAtPiBib29sIHsgcmV0dXJuIChhLngpIDwgKGIueCk7IH0gKTsKCXN0ZDo6Y291dCA8PCAic3dhcENvdW50PSIgPDwgc3dhcENvdW50IDw8ICJcbiI7CgkKCXN0ZDo6c29ydCggdmVjLmJlZ2luKCksIHZlYy5lbmQoKSwgCgkJW10gKCBjb25zdCBYICZhLCBjb25zdCBYICZiICkgLT4gYm9vbCB7IHJldHVybiAoYS54KSA8IChiLngpOyB9ICk7CglzdGQ6OmNvdXQgPDwgInN3YXBDb3VudD0iIDw8IHN3YXBDb3VudCA8PCAiXG4iOwoJCglzdGQ6OnNvcnQoIHZlYy5iZWdpbigpLCB2ZWMuZW5kKCksIAoJCVtdICggY29uc3QgWCAmYSwgY29uc3QgWCAmYiApIC0+IGJvb2wgeyByZXR1cm4gKGEueCkgPCAoYi54KTsgfSApOwoJc3RkOjpjb3V0IDw8ICJzd2FwQ291bnQ9IiA8PCBzd2FwQ291bnQgPDwgIlxuIjsKCQoJcmV0dXJuIDA7Cn0=