#include <map>
#include <string>
#include <sstream>
#include <iomanip>
#include <iostream>
int main()
{
std::map< unsigned char, char > look_up ;
// populate the map with data from the stream containing the table
{
std::istringstream stream( "61=M \n 62=N \n 63=O \n 64=P \n 65=Q \n" ) ;
std::string byte ;
char separator ;
char data ;
while( stream >> std::setw(2) >> byte >> separator >> data && separator == '=' )
{
// look_up[ std::stoi(byte,nullptr,16) ] = data ;
std::istringstream stm(byte) ;
int key ;
stm >> std::hex >> key ;
look_up[key] = data ;
}
}
// use the map to translate the input data
{
std::istringstream stm( "abcdexedcbayaedbc" ) ;
unsigned char byte ;
while( stm >> byte )
{
auto p = look_up.find(byte) ;
if( p != look_up.end() ) std::cout << p->second ;
else std::cout << char(byte) ; // lookup failed
}
}
}
I2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxpb21hbmlwPgojaW5jbHVkZSA8aW9zdHJlYW0+CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6bWFwPCB1bnNpZ25lZCBjaGFyLCBjaGFyID4gbG9va191cCA7CgogICAgLy8gcG9wdWxhdGUgdGhlIG1hcCB3aXRoIGRhdGEgZnJvbSB0aGUgc3RyZWFtIGNvbnRhaW5pbmcgdGhlIHRhYmxlCiAgICB7CiAgICAgICAgc3RkOjppc3RyaW5nc3RyZWFtIHN0cmVhbSggIjYxPU0gXG4gNjI9TiBcbiA2Mz1PIFxuIDY0PVAgXG4gNjU9USBcbiIgKSA7CiAgICAgICAgc3RkOjpzdHJpbmcgYnl0ZSA7CiAgICAgICAgY2hhciBzZXBhcmF0b3IgOwogICAgICAgIGNoYXIgZGF0YSA7CiAgICAgICAgd2hpbGUoIHN0cmVhbSA+PiBzdGQ6OnNldHcoMikgPj4gYnl0ZSA+PiBzZXBhcmF0b3IgPj4gZGF0YSAmJiBzZXBhcmF0b3IgPT0gJz0nICkKICAgICAgICB7CiAgICAgICAgICAgIC8vIGxvb2tfdXBbIHN0ZDo6c3RvaShieXRlLG51bGxwdHIsMTYpIF0gPSBkYXRhIDsKCiAgICAgICAgICAgIHN0ZDo6aXN0cmluZ3N0cmVhbSBzdG0oYnl0ZSkgOwogICAgICAgICAgICBpbnQga2V5IDsKICAgICAgICAgICAgc3RtID4+IHN0ZDo6aGV4ID4+IGtleSA7CiAgICAgICAgICAgIGxvb2tfdXBba2V5XSA9IGRhdGEgOwogICAgICAgIH0KICAgIH0KCiAgICAvLyB1c2UgdGhlIG1hcCB0byB0cmFuc2xhdGUgdGhlIGlucHV0IGRhdGEKICAgIHsKICAgICAgICBzdGQ6OmlzdHJpbmdzdHJlYW0gc3RtKCAiYWJjZGV4ZWRjYmF5YWVkYmMiICkgOwogICAgICAgIHVuc2lnbmVkIGNoYXIgYnl0ZSA7CiAgICAgICAgd2hpbGUoIHN0bSA+PiBieXRlICkKICAgICAgICB7CiAgICAgICAgICAgIGF1dG8gcCA9IGxvb2tfdXAuZmluZChieXRlKSA7CiAgICAgICAgICAgIGlmKCBwICE9IGxvb2tfdXAuZW5kKCkgKSBzdGQ6OmNvdXQgPDwgcC0+c2Vjb25kIDsKICAgICAgICAgICAgZWxzZSBzdGQ6OmNvdXQgPDwgY2hhcihieXRlKSA7IC8vIGxvb2t1cCBmYWlsZWQKICAgICAgICB9CiAgICB9Cn0K