Fråga : Hjälp mig att optimera detta kodifierar.

Hur jag stoppar upprepningen, när ett mer stor distanserar möts?  Jag önskar inte att iterate till och med den hela vektorn i 2nd kretsar (stunder kretsar). > för
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:
" codeBody " " för >#include för class= " för #include #include #include #include #include using namespace std; struct StudentAttempt { int distanserar; stränga studentName; }; cmpEntry bool (lämnade StudentAttempt, högra StudentAttempt) { återgång == right.studentName för && left.studentName för left.distance-== right.distance; } boolcmpAttempts (lämnade StudentAttempt, högra StudentAttempt) { om (left.distance < right.distance) { återgångt true; } annars, om (left.distance-== right.distance) { om (left.studentName < right.studentName) { återgångt true; } annars återgångt falskt; } annars återgångt falskt; } isDistEqual bool (lämnade StudentAttempt, högra StudentAttempt) { gå tillbaka (left.distance-== right.distance && left.studentName! = right.studentName); } printAllEqual size_t (constvector& v, constStudentAttempt& sa, stringstream& ss) { vector:: const_iterator i = v.begin (); size_t sz = 0; boolbFirst = true; stunder (I! = v.end ()) { om (isDistEqual (*ien, sa)) { om (! bFirst) ss << ”,”; ss << i->studentName; ++sz; } ++i; bFirst = falskt; } återgång sz; } huvudsaklig int () { StudentAttempt throwDist [] = { {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 behandlade; int len = sizeof) (för throwDist/sizeof (throwDist [0]); vectordist (throwDisten, throwDist + len); vector:: iterator det = dist.begin (); sortera (dist.begin (), dist.end (), cmpAttempts); unikt (dist.begin (), dist.end () som, är cmpEntry); // tar bort identiska dubblett från den sorterade vektorn för (; det! = dist.end (); it++) { stringstream ss; pair:: iterator bool> p = handled.insert (it->distance); om (! p.second) fortsätter; // behandlade redan om (0 < printAllEqual (disten, *it, ss)) cout << setw (2) << (*it) .distance << ”fot: ” << (*it) .studentName << ss.str () << endl; } }
" klar "

Svar : Hjälp mig att optimera detta kodifierar.

Som i ditt annat Q, du kunde göra något som optimerar, genom att stoppa upprepningen, när dig mötet som en distansera, som är större än den oss, kontrollerar för (sedan ingen ska jämbördig följer från därefter), e.g.
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:
printAllEqual size_t (constvector& v, constStudentAttempt& sa, stringstream& ss) {

  vektor:: const_iterator i = v.begin ();
  size_t sz = 0;
  boolbFirst = true;

  stunder (I! = v.end ()) {

    om (isDistEqual (*ien, sa)) {
    
      om (! ss-studentName för bFirst <>);
      ++sz;

      // som vi kan stoppa här, när möta distanserar
      // som är större än den vi, är, sedan vektorn är
      // sorterade, i att stiga, beställer (om inte, skulle denna orsakar fel),
      // distanserar Higher ska aldrig jämbördigt vår
      om (i->distance > sa.distance) avbrott;
    }

    ++i; 
    bFirst = falskt;
  }

  återgång sz;
}
Andra lösningar  
 
programming4us programming4us