class custom_cmp {
public:
custom_cmp(const map<int, double> &_cmptable):cmptable(_cmptable){}
bool operator()(const int &lhs, const int &rhs)
{
if(cmptable[lhs] > cmptable[rhs])
return 1;
else if(cmptable[lhs] == cmptable[rhs])
return lhs < rhs;
else return 0;
}
map<int, double> cmptable;
};
class A
{
public:
// 如何在宣告class A object時也建立好內部map成員的比較函式
// 像main function宣告的方式一樣
A(const map<int, double> &_cmptable):cmptable(_cmptable){}
map<int, double> cmptable;
// 底下不行這樣寫
custom_cmp cmpobject(cmptable);
map< int, shared_ptr<char>, custom_cmp> header(cmpobject);
};
int main(int argc, char *argv[])
{
// 在main function內這樣宣告可以
map<int, double> cmptable;
custom_cmp cmpobject(cmptable);
map< int, shared_ptr<char>, custom_cmp> header(cmpobject);
// 想在宣告A的物件時, Aobj內的header可根據cmptable來排序
A Aobj(cmptable);
return 0;
}
Y2xhc3MgY3VzdG9tX2NtcCAgICB7CnB1YmxpYzoKCWN1c3RvbV9jbXAoY29uc3QgbWFwPGludCwgZG91YmxlPiAmX2NtcHRhYmxlKTpjbXB0YWJsZShfY21wdGFibGUpe30KCWJvb2wgb3BlcmF0b3IoKShjb25zdCBpbnQgJmxocywgY29uc3QgaW50ICZyaHMpCgl7CgkJaWYoY21wdGFibGVbbGhzXSA+IGNtcHRhYmxlW3Joc10pCgkJCXJldHVybiAxOwoJCWVsc2UgaWYoY21wdGFibGVbbGhzXSA9PSBjbXB0YWJsZVtyaHNdKQoJCQlyZXR1cm4gbGhzIDwgcmhzOwoJCWVsc2UgcmV0dXJuIDA7Cgl9CgltYXA8aW50LCBkb3VibGU+IGNtcHRhYmxlOwp9OwoKY2xhc3MgQQp7CnB1YmxpYzoKICAgIC8vIOWmguS9leWcqOWuo+WRimNsYXNzIEEgb2JqZWN05pmC5Lmf5bu656uL5aW95YWn6YOobWFw5oiQ5ZOh55qE5q+U6LyD5Ye95byPCiAgICAvLyDlg49tYWluIGZ1bmN0aW9u5a6j5ZGK55qE5pa55byP5LiA5qijCglBKGNvbnN0IG1hcDxpbnQsIGRvdWJsZT4gJl9jbXB0YWJsZSk6Y21wdGFibGUoX2NtcHRhYmxlKXt9CgkKICAgIG1hcDxpbnQsIGRvdWJsZT4gY21wdGFibGU7CiAgICAvLyDlupXkuIvkuI3ooYzpgJnmqKPlr6sKCWN1c3RvbV9jbXAgY21wb2JqZWN0KGNtcHRhYmxlKTsKCW1hcDwgaW50LCBzaGFyZWRfcHRyPGNoYXI+LCBjdXN0b21fY21wPiBoZWFkZXIoY21wb2JqZWN0KTsKfTsKCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCnsKICAgIC8vIOWcqG1haW4gZnVuY3Rpb27lhafpgJnmqKPlrqPlkYrlj6/ku6UKICAgIG1hcDxpbnQsIGRvdWJsZT4gY21wdGFibGU7CiAgICBjdXN0b21fY21wIGNtcG9iamVjdChjbXB0YWJsZSk7CiAgICBtYXA8IGludCwgc2hhcmVkX3B0cjxjaGFyPiwgY3VzdG9tX2NtcD4gaGVhZGVyKGNtcG9iamVjdCk7CiAgICAKICAgIC8vIOaDs+WcqOWuo+WRikHnmoTnianku7bmmYIsIEFvYmrlhafnmoRoZWFkZXLlj6/moLnmk5pjbXB0YWJsZeS+huaOkuW6jwogICAgQSBBb2JqKGNtcHRhYmxlKTsKICAgIAogICAgcmV0dXJuIDA7Cn0=