#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
template< class T >
struct ColumnAdapter {
ColumnAdapter( size_t column ) : m_column( column ) {}
bool operator()( const std::vector< T > & left, const std::vector< T > & right ) {
return left.at( m_column ) < right.at( m_column );
}
private:
size_t m_column;
};
int main() {
std::vector< std::vector< int > > v = {
{ 2, 3, 4, 5, 6, 7 },
{ 1, 2, 3, 4, 5, 6 },
{ 20, 30, 40, 50, 60, 70 },
{ 2, 3, 4, 5, 6, 7 },
};
const size_t COLUMN = 1;
auto biggest = std::max_element(std::begin(v), std::end(v), ColumnAdapter< int >( COLUMN ) );
std::cout << "Max element is " << (*biggest).at( COLUMN )
<< " at position " << std::distance(std::begin(v), biggest) << std::endl;
auto smallest = std::min_element(std::begin(v), std::end(v), ColumnAdapter< int >( COLUMN ) );
std::cout << "min element is " << (*smallest).at( COLUMN )
<< " at position " << std::distance(std::begin(v), smallest) << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8IGNsYXNzIFQgPgpzdHJ1Y3QgQ29sdW1uQWRhcHRlciB7CglDb2x1bW5BZGFwdGVyKCBzaXplX3QgY29sdW1uICkgOiBtX2NvbHVtbiggY29sdW1uICkge30KCWJvb2wgb3BlcmF0b3IoKSggY29uc3Qgc3RkOjp2ZWN0b3I8IFQgPiAmIGxlZnQsIGNvbnN0IHN0ZDo6dmVjdG9yPCBUID4gJiByaWdodCApIHsKCQlyZXR1cm4gbGVmdC5hdCggbV9jb2x1bW4gKSA8IHJpZ2h0LmF0KCBtX2NvbHVtbiApOwoJfQpwcml2YXRlOgogICAgc2l6ZV90IG1fY29sdW1uOwp9OwoKaW50IG1haW4oKSB7CglzdGQ6OnZlY3Rvcjwgc3RkOjp2ZWN0b3I8IGludCA+ID4gdiA9IHsKCQl7IDIsICAzLCA0LCA1LCA2LCA3IH0sCgkJeyAxLCAgMiwgMywgNCwgNSwgNiB9LAoJCXsgMjAsIDMwLCA0MCwgNTAsIDYwLCA3MCB9LAoJCXsgMiwgIDMsIDQsIDUsIDYsIDcgfSwKCX07Cgljb25zdCBzaXplX3QgQ09MVU1OID0gMTsKIAlhdXRvIGJpZ2dlc3QgPSBzdGQ6Om1heF9lbGVtZW50KHN0ZDo6YmVnaW4odiksIHN0ZDo6ZW5kKHYpLCBDb2x1bW5BZGFwdGVyPCBpbnQgPiggQ09MVU1OICkgKTsKICAgIHN0ZDo6Y291dCA8PCAiTWF4IGVsZW1lbnQgaXMgIiA8PCAoKmJpZ2dlc3QpLmF0KCBDT0xVTU4gKQogICAgICAgIDw8ICIgYXQgcG9zaXRpb24gIiA8PCBzdGQ6OmRpc3RhbmNlKHN0ZDo6YmVnaW4odiksIGJpZ2dlc3QpIDw8IHN0ZDo6ZW5kbDsKCiAgICBhdXRvIHNtYWxsZXN0ID0gc3RkOjptaW5fZWxlbWVudChzdGQ6OmJlZ2luKHYpLCBzdGQ6OmVuZCh2KSwgQ29sdW1uQWRhcHRlcjwgaW50ID4oIENPTFVNTiApICk7CiAgICBzdGQ6OmNvdXQgPDwgIm1pbiBlbGVtZW50IGlzICIgPDwgKCpzbWFsbGVzdCkuYXQoIENPTFVNTiApCiAgICAgICAgPDwgIiBhdCBwb3NpdGlvbiAiIDw8IHN0ZDo6ZGlzdGFuY2Uoc3RkOjpiZWdpbih2KSwgc21hbGxlc3QpIDw8IHN0ZDo6ZW5kbDsJCglyZXR1cm4gMDsKfQ==