#include <vector>
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
std::vector<std::vector<int>> vect = {{0,2,3},{2,1,5},{1,2,4}};
std::vector<int> row = {3,0,1,2,-1,-2,15};
// new vector: pair of integer -> representing the rows of vect and index
std::vector<std::pair<std::string, int>> newVect;
newVect.reserve(vect.size());
int index = 0;
for(const std::vector<int>& each_row: vect)
{
std::string str; // each row of vect to a single integer string
for(const int Integer: each_row) str += std::to_string(Integer);
newVect.emplace_back(std::make_pair(str, index));
++index;
}
// sort the new vector, according to the whole 2D vector row(which is a single string)
std::sort(newVect.begin(), newVect.end(), [](const auto& lhs, const auto& rhs)
{
return lhs.first < rhs.first;
});
// now you can actually store the sorted vect
vect.clear();
for(auto index = 1; index <= row[0]; ++index)
{
row[index] = newVect[index-1].second; // replace the row indexes which are sorted
std::vector<int> vect_row;
// change each chars of string back to corresponding row elements
for(const char Integer: newVect[index-1].first)
vect_row.emplace_back(static_cast<int>(Integer - '0'));
// store to original vector
vect.emplace_back(vect_row);
}
// to print
for(const std::vector<int>& each_row: vect)
{
for(const int Intger: each_row)
std::cout << Intger << " ";
std::cout << std::endl;
}
for(const int it: row) std::cout << it << " ";
return 0;
}
ICAgICNpbmNsdWRlIDx2ZWN0b3I+CiAgICAjaW5jbHVkZSA8aW9zdHJlYW0+CiAgICAjaW5jbHVkZSA8c3RyaW5nPgogICAgI2luY2x1ZGUgPGFsZ29yaXRobT4KICAgIAogICAgaW50IG1haW4oKQogICAgewogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8aW50Pj4gIHZlY3QgPSB7ezAsMiwzfSx7MiwxLDV9LHsxLDIsNH19OwogICAgICAgc3RkOjp2ZWN0b3I8aW50PiByb3cgPSB7MywwLDEsMiwtMSwtMiwxNX07CiAgICAgICAvLyBuZXcgdmVjdG9yOiAgcGFpciBvZiBpbnRlZ2VyIC0+IHJlcHJlc2VudGluZyB0aGUgcm93cyBvZiB2ZWN0IGFuZCBpbmRleAogICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBpbnQ+PiBuZXdWZWN0OwogICAgICAgbmV3VmVjdC5yZXNlcnZlKHZlY3Quc2l6ZSgpKTsKICAgIAogICAgICAgaW50IGluZGV4ID0gMDsKICAgICAgIGZvcihjb25zdCBzdGQ6OnZlY3RvcjxpbnQ+JiBlYWNoX3JvdzogdmVjdCkKICAgICAgIHsKICAgICAgICAgIHN0ZDo6c3RyaW5nIHN0cjsgICAgICAgICAgICAgLy8gZWFjaCByb3cgb2YgdmVjdCB0byBhIHNpbmdsZSBpbnRlZ2VyIHN0cmluZwogICAgICAgICAgZm9yKGNvbnN0IGludCBJbnRlZ2VyOiBlYWNoX3Jvdykgc3RyICs9IHN0ZDo6dG9fc3RyaW5nKEludGVnZXIpOwogICAgICAgICAgbmV3VmVjdC5lbXBsYWNlX2JhY2soc3RkOjptYWtlX3BhaXIoc3RyLCBpbmRleCkpOwogICAgICAgICAgKytpbmRleDsKICAgICAgIH0KICAgICAgIC8vIHNvcnQgdGhlIG5ldyB2ZWN0b3IsIGFjY29yZGluZyB0byB0aGUgd2hvbGUgMkQgdmVjdG9yIHJvdyh3aGljaCBpcyBhIHNpbmdsZSBzdHJpbmcpCiAgICAgICBzdGQ6OnNvcnQobmV3VmVjdC5iZWdpbigpLCBuZXdWZWN0LmVuZCgpLCBbXShjb25zdCBhdXRvJiBsaHMsIGNvbnN0IGF1dG8mIHJocykKICAgICAgIHsKICAgICAgICAgIHJldHVybiBsaHMuZmlyc3QgPCByaHMuZmlyc3Q7CiAgICAgICB9KTsKICAgICAgIC8vIG5vdyB5b3UgY2FuIGFjdHVhbGx5IHN0b3JlIHRoZSBzb3J0ZWQgdmVjdAogICAgICAgdmVjdC5jbGVhcigpOwogICAgICAgZm9yKGF1dG8gaW5kZXggPSAxOyBpbmRleCA8PSByb3dbMF07ICsraW5kZXgpCiAgICAgICB7CiAgICAgICAgICByb3dbaW5kZXhdID0gbmV3VmVjdFtpbmRleC0xXS5zZWNvbmQ7ICAvLyByZXBsYWNlIHRoZSByb3cgaW5kZXhlcyB3aGljaCBhcmUgc29ydGVkCiAgICAgICAgICBzdGQ6OnZlY3RvcjxpbnQ+IHZlY3Rfcm93OwogICAgICAgICAgLy8gY2hhbmdlIGVhY2ggY2hhcnMgb2Ygc3RyaW5nIGJhY2sgdG8gY29ycmVzcG9uZGluZyByb3cgZWxlbWVudHMKICAgICAgICAgIGZvcihjb25zdCBjaGFyIEludGVnZXI6IG5ld1ZlY3RbaW5kZXgtMV0uZmlyc3QpCiAgICAgICAgICAgICB2ZWN0X3Jvdy5lbXBsYWNlX2JhY2soc3RhdGljX2Nhc3Q8aW50PihJbnRlZ2VyIC0gJzAnKSk7CiAgICAgICAgICAvLyBzdG9yZSB0byBvcmlnaW5hbCB2ZWN0b3IKICAgICAgICAgIHZlY3QuZW1wbGFjZV9iYWNrKHZlY3Rfcm93KTsKICAgICAgIH0KICAgIAogICAgICAgLy8gdG8gcHJpbnQKICAgICAgIGZvcihjb25zdCBzdGQ6OnZlY3RvcjxpbnQ+JiBlYWNoX3JvdzogdmVjdCkKICAgICAgIHsKICAgICAgICAgIGZvcihjb25zdCBpbnQgSW50Z2VyOiBlYWNoX3JvdykKICAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBJbnRnZXIgPDwgIiAiOwogICAgICAgICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKICAgICAgIH0KICAgICAgIGZvcihjb25zdCBpbnQgaXQ6IHJvdykgc3RkOjpjb3V0IDw8IGl0IDw8ICIgIjsKICAgICAgIHJldHVybiAwOwogICAgfQ==