#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <algorithm>
#include <set>
using namespace std;
vector<pair<string,string>> KeySort(map<string,string> s, const vector<string>& order){
vector<pair<string,string>> res;
for (const auto& it : order) {
auto needle = s.find(it);
if(needle != s.end()){
res.emplace_back(move(*needle));
s.erase(needle);
}
}
for (auto&& it : s) res.emplace_back(move(it));
return res;
}
int main() {
// create vector holding desired ordering
vector<string> ord({ "a", "d", "i", "n", "ns", "ne", "vl", "rr" });
// create the map
map<string,string> MyMap = { {"a","legato"}, {"vl","4"}, {"i","2"}, {"rr","3"}, {"z","unspecified1"}, {"b","unspecified2"}};
// sort the vector
vector<pair<string,string>> out = KeySort(MyMap, ord);
// put the vector pairs into a string format
for (auto& it : out) cout << it.first << "=" << it.second << " ";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8c2V0Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdmVjdG9yPHBhaXI8c3RyaW5nLHN0cmluZz4+IEtleVNvcnQobWFwPHN0cmluZyxzdHJpbmc+IHMsIGNvbnN0IHZlY3RvcjxzdHJpbmc+JiBvcmRlcil7CiAgICB2ZWN0b3I8cGFpcjxzdHJpbmcsc3RyaW5nPj4gcmVzOwogICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IG9yZGVyKSB7CiAgICAgICAgYXV0byBuZWVkbGUgPSBzLmZpbmQoaXQpOwogICAgICAgIGlmKG5lZWRsZSAhPSBzLmVuZCgpKXsKICAgICAgICAgICAgcmVzLmVtcGxhY2VfYmFjayhtb3ZlKCpuZWVkbGUpKTsKICAgICAgICAgICAgcy5lcmFzZShuZWVkbGUpOwogICAgICAgIH0KICAgIH0KICAgIGZvciAoYXV0byYmIGl0IDogcykgcmVzLmVtcGxhY2VfYmFjayhtb3ZlKGl0KSk7CiAgICByZXR1cm4gcmVzOwp9CgppbnQgbWFpbigpIHsKICAgIC8vIGNyZWF0ZSB2ZWN0b3IgaG9sZGluZyBkZXNpcmVkIG9yZGVyaW5nCiAgICB2ZWN0b3I8c3RyaW5nPiBvcmQoeyAiYSIsICJkIiwgImkiLCAibiIsICJucyIsICJuZSIsICJ2bCIsICJyciIgfSk7CiAgICAKICAgIC8vIGNyZWF0ZSB0aGUgbWFwCiAgICBtYXA8c3RyaW5nLHN0cmluZz4gTXlNYXAgPSB7IHsiYSIsImxlZ2F0byJ9LCB7InZsIiwiNCJ9LCB7ImkiLCIyIn0sIHsicnIiLCIzIn0sIHsieiIsInVuc3BlY2lmaWVkMSJ9LCB7ImIiLCJ1bnNwZWNpZmllZDIifX07CgogICAgLy8gc29ydCB0aGUgdmVjdG9yCiAgICB2ZWN0b3I8cGFpcjxzdHJpbmcsc3RyaW5nPj4gb3V0ID0gS2V5U29ydChNeU1hcCwgb3JkKTsKCiAgICAvLyBwdXQgdGhlIHZlY3RvciBwYWlycyBpbnRvIGEgc3RyaW5nIGZvcm1hdAogICAgZm9yIChhdXRvJiBpdCA6IG91dCkgY291dCA8PCBpdC5maXJzdCA8PCAiPSIgPDwgaXQuc2Vjb25kIDw8ICIgIjsKCiAgICByZXR1cm4gMDsKfQ==