1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91:
#include #include #include #include #include #include using namespace std; struct StudentAttempt { расстояние int; studentName шнура; }; cmpAttempts bool (StudentAttempt ое, право StudentAttempt) { если (left.distance < right.distance) {, то возвращенно true; } еще если (== right.distance left.distance) {, то если (left.studentName < right.studentName) {, то возвращенно true; } еще возвращенное ложное; } еще возвращенное ложное; } bool isDistEqual (StudentAttempt ое, право StudentAttempt) { возвратите (== right.distance left.distance && left.studentName! = right.studentName); } size_t printAllEqual (vector& v const, StudentAttempt& sa const, stringstream& ss) { vector:: const_iterator iий = v.begin (); size_t sz = 0; bFirst bool = true; пока (I! = v.end ()) { если (isDistEqual, то (*i, sa)) { если (! bFirst) ss << «,»; ss << i->studentName; ++sz; } ++i; bFirst = ложно; } возвращенный sz; } основа int () { throwDist StudentAttempt [] = { {50, «A»}, {22, «A»}, {16, «B»}, {44, «C»}, {33, «D»}, {34, «E»}, {22, «F»}, {21, «G»}, {49, «A»}, {5, «B»}, {2, «C»}, {22, «A»}, {33, «B»}, {22, «C»}, {22, «D»}, {44, «E»}, {22, «D»} }; set отрегулировало; int len = sizeof) (throwDist/sizeof (throwDist [0]); dist vector (throwDist, throwDist + len); vector:: iterator оно = dist.begin (); вид (dist.begin (), dist.end (), cmpAttempts); //unique (dist.begin (), dist.end (), cmpDist); для (; оно! = dist.end (); it++) { stringstream ss; pair:: iterator, bool> p = handled.insert (it->distance); если (! p.second) продолжаются; // уже отрегулировало если (0 < printAllEqual, то (dist, *it, ss)) cout << setw (2) << (*it) .distance << «ноги: » << (*it) .studentName << ss.str () << endl; } }
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97:
#include #include #include #include #include #include #include using namespace std; struct StudentAttempt { расстояние int; studentName шнура; }; bool cmpEntry (StudentAttempt ое, право StudentAttempt) { возвращенное == right.studentName && left.studentName == right.distance left.distance; } cmpAttempts bool (StudentAttempt ое, право StudentAttempt) { если (left.distance < right="">& v, StudentAttempt& sa const, stringstream& ss) {, то вектор:: const_iterator iий = v.begin (); size_t sz = 0; bFirst bool = true; пока (I! = v.end ()) { если (isDistEqual, то (*i, sa)) { если (! studentName ss bFirst <>); ++sz; } ++i; bFirst = ложно; } возвращенный sz; } основа int () { throwDist StudentAttempt [] = { {50, «A»}, {22, «A»}, {16, «B»}, {44, «C»}, {33, «D»}, {34, «E»}, {22, «F»}, {21, «G»}, {49, «A»}, {5, «B»}, {2, «C»}, {22, «A»}, {33, «B»}, {22, «C»}, {22, «D»}, {44, «E»}, {22, «D»} }; комплект отрегулировал; int len = sizeof) (throwDist/sizeof (throwDist [0]); dist вектора (throwDist, throwDist + len); вектор:: iterator оно = dist.begin (); вид (dist.begin (), dist.end (), cmpAttempts); уникально (dist.begin (), dist.end (), cmpEntry); // извлекает идентичные дубликаты от сортированного вектора для (; оно! = dist.end (); it++) { stringstream ss; пары:: iterator, bool> p = handled.insert (it->distance); если (! p.second) продолжаются; // уже отрегулировало если (0 < printAllEqual="">