#include <iostream>
#include <map>
struct MyKey {
// key data
std::string addr;
int priority;
// constructor
MyKey(const std::string & s, const int p)
: addr(s), priority(p) {}
// overloaded operator
bool operator<(const MyKey &that) const {
// same key if addr is the same
if (that.addr == this->addr)
return false;
// not same key so look at priorities to determine order
if (that.priority < this->priority)
return true;
if (that.priority > this->priority)
return false;
// priorities are the same so use the string compare
return (that.addr > this->addr);
}
};
int main()
{
MyKey mk1{ "a",3 }, mk2{ "b", 2 }, mk3 { "a", 1 };
std::cout << (mk1 < mk2) << std::endl;
std::cout << (mk2 < mk3) << std::endl;
std::cout << (mk1 < mk3) << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgoKc3RydWN0IE15S2V5IHsKCiAgICAvLyBrZXkgZGF0YQogICAgc3RkOjpzdHJpbmcgYWRkcjsKICAgIGludCBwcmlvcml0eTsKCiAgICAvLyBjb25zdHJ1Y3RvcgogICAgTXlLZXkoY29uc3Qgc3RkOjpzdHJpbmcgJiBzLCBjb25zdCBpbnQgcCkgCiAgICAgICAgOiBhZGRyKHMpLCBwcmlvcml0eShwKSB7fQoKICAgIC8vIG92ZXJsb2FkZWQgb3BlcmF0b3IKICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE15S2V5ICZ0aGF0KSBjb25zdCB7CgogICAgICAgIC8vIHNhbWUga2V5IGlmIGFkZHIgaXMgdGhlIHNhbWUKICAgICAgICBpZiAodGhhdC5hZGRyID09IHRoaXMtPmFkZHIpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgLy8gbm90IHNhbWUga2V5IHNvIGxvb2sgYXQgcHJpb3JpdGllcyB0byBkZXRlcm1pbmUgb3JkZXIKICAgICAgICBpZiAodGhhdC5wcmlvcml0eSA8IHRoaXMtPnByaW9yaXR5KQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAodGhhdC5wcmlvcml0eSA+IHRoaXMtPnByaW9yaXR5KQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIC8vIHByaW9yaXRpZXMgYXJlIHRoZSBzYW1lIHNvIHVzZSB0aGUgc3RyaW5nIGNvbXBhcmUKICAgICAgICByZXR1cm4gKHRoYXQuYWRkciA+IHRoaXMtPmFkZHIpOwogICAgfQp9OwoKCmludCBtYWluKCkgCnsKICAgIE15S2V5IG1rMXsgImEiLDMgfSwgbWsyeyAiYiIsIDIgfSwgbWszIHsgImEiLCAxIH07CiAgICBzdGQ6OmNvdXQgPDwgKG1rMSA8IG1rMikgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8IChtazIgPCBtazMpIDw8IHN0ZDo6ZW5kbDsKICAgIHN0ZDo6Y291dCA8PCAobWsxIDwgbWszKSA8PCBzdGQ6OmVuZGw7Cn0=