【发布时间】:2020-08-09 23:54:46
【问题描述】:
有没有一种有效的方法可以根据子字符串的匹配将字符串作为重复项删除?
考虑一个包含多个相同格式的 CSV 字符串的向量(combinedvect):
'QWERTY, PROTMD, PEDKF, 12345.15454'
'ASDFGH, LDMEMA, PWEMDE, 23456.938984'
'ZXCVBN, NMDFN, MNMWNS, 34567.903'
'ASDFGH, LDMEMA, PWEMDE, 23444.624'
'QWERTY, PROTMD, PEDKF, 15654.15454'
反向排序使用:
std::sort (combinedvect.begin(), combinedvect.end(), std::greater<>());
结果:
'ZXCVBN, NMDFN, MNMWNS, 34567.903'
'QWERTY, PROTMD, PEDKF, 15654.15454'
'QWERTY, PROTMD, PEDKF, 12345.15454'
'ASDFGH, LDMEMA, PWEMDE, 23456.938984'
'ASDFGH, LDMEMA, PWEMDE, 23444.624'
反向排序用于按数字子串从高到低的顺序列出重复项,如:
'QWERTY, PROTMD, PEDKF, 15654.15454'
'QWERTY, PROTMD, PEDKF, 12345.15454'
目标是删除前 3 个子字符串与前 3 个子字符串匹配的任何整个字符串,然后按数字子字符串的升序对结果输出进行排序。
输出应如下所示:
'QWERTY, PROTMD, PEDKF, 15654.15454'
'ASDFGH, LDMEMA, PWEMDE, 23456.938984'
'ZXCVBN, NMDFN, MNMWNS, 34567.903'
拆分和映射函数,例如:
void splitsort(const std::string &s, double &selectedLPLSQLDate, std::string &mycombinedtext) {
size_t idx = s.find(',');
mycombinedtext= s.substr(0, idx+2);
selectedLPLSQLDate = std::stod(s.substr(idx+3));
}
bool mapFunc(const std::string &a, const std::string &b) {
double selectedLPLSQLDate1, selectedLPLSQLDate2;
std::string mycombinedtext1, mycombinedtext2;
splitsort(a, selectedLPLSQLDate1, mycombinedtext1);
splitsort(b, selectedLPLSQLDate2, mycombinedtext2);
return selectedLPLSQLDate1 < selectedLPLSQLDate2;
}
不适合
std::sort (combinedvect.begin(), combinedvect.end(), mapFunc);
【问题讨论】: