Cuestión : ¿Cómo expreso esto en código?

Recapitulación: Hay una competencia entre estudiantes AG para ver quién puede poner en marcha un objeto el más lejano de pies.  Quise identificar casos cuando hay lazos entre diversos estudiantes es decir donde están los exactos sus tiros la misma distancia.  No cuido si un estudiante se ata. el

Ok, si usted funciona con este código usted notará que el estudiante D aparece dos veces en los 22 pies alinea.  ¿Cómo me libro de esto para no repetir ningún estudiante dos veces en ningún distsance?  ¿Veo cuál es mal y puede explicarlo en las palabras. .but mis heladas de la mente para arriba cuando quiero cambiar la ayuda del código…?

class= > " claro " del
> del " codeSnippet " del class= del
class= " lineNumbers " del
class= del
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:
notpretty del >#include " del class= " de " codeSnippet839976 del id= del
 del #include
 del #include
 del #include
 del #include
 del #include
 del #include

usar namespace std;

struct StudentAttempt
{
   distancia de la internacional;
   studentName de la secuencia;
};

cmpAttempts del bool (StudentAttempt dejado, la derecha de StudentAttempt) {
   si (left.distance < right.distance) {
      de vuelta verdad;
   }
   si (== right.distance de left.distance) {
      si (left.studentName < right.studentName) {
         de vuelta verdad;
      }
      
         falso de vuelta;
   }
   
      falso de vuelta;
}

bool isDistEqual (StudentAttempt dejado, la derecha de StudentAttempt) {
   volver (== right.distance de left.distance
      ¡&& left.studentName! = right.studentName);
}

size_t printAllEqual (vector& v, StudentAttempt& sa, stringstream& ss del const del const) {

   vector:: const_iterator i = v.begin ();
  size_t SZ = 0;
  el bFirst del bool = verdad;

  ¡mientras que (i! = v.end ()) {

    si (isDistEqual (*i, sa)) {
    
      ¡si (! bFirst) ss << “,”;
      ss << i->studentName;
      ++sz;
    }

    ++i; 
    bFirst = falso;
  }

  SZ de vuelta;
}
 

cañería de la internacional () {

   throwDist de 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”}
   };

   el set dirigió;

   internacional len = sizeof ()/sizeof (throwDist [0] del throwDist);
   dist del vector (el throwDist, throwDist + len);
   vector:: iterator él = dist.begin ();

   clase (dist.begin (), dist.end (), cmpAttempts);
   //unique (dist.begin (), dist.end (), cmpDist);


   para (; ¡él! = dist.end (); it++) {

      stringstream ss;

      pair:: iterator, bool> p = handled.insert (it->distance);

      ¡si (! p.second) continúan; // dirigió ya

      si (0 < printAllEqual (dist, *it, ss)) 
        cout << setw (2) << (*it) .distance 
           << “pies:  ” << (*it) .studentName << ss.str () << endl;
   }
}
class= del

Respuesta : ¿Cómo expreso esto en código?

Bien, adentro

      {33, “B”}, {22, “C”}, {22, “D”}, {44, “E”}, {22, “D”}

usted tiene que entrada muy duplicado - apenas quitarla después de que se clasifique, 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:
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  

usar namespace std;

struct StudentAttempt
{
   distancia de la internacional;
   studentName de la secuencia;
};

bool cmpEntry (StudentAttempt dejado, la derecha de StudentAttempt) {
   == de vuelta right.studentName del && left.studentName del == right.distance de left.distance;
}
cmpAttempts del bool (StudentAttempt dejado, la derecha de StudentAttempt) {
   si (left.distance < right="">y v, StudentAttempt& sa, stringstream& ss del const) {

   vector:: const_iterator i = v.begin ();
  size_t SZ = 0;
  el bFirst del bool = verdad;

  ¡mientras que (i! = v.end ()) {

    si (isDistEqual (*i, sa)) {
    
      ¡si (! studentName de los ss del bFirst <>);
      ++sz;
    }

    ++i; 
    bFirst = falso;
  }

  SZ de vuelta;
}
 

cañería de la internacional () {

   throwDist de 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”}
   };


   sistema manejado;

   internacional len = sizeof ()/sizeof (throwDist [0] del throwDist);

   dist del vector (el throwDist, throwDist + len);
   vector:: iterator él = dist.begin ();

   clase (dist.begin (), dist.end (), cmpAttempts);

   único (dist.begin (), dist.end (), cmpEntry); // quita los duplicados idénticos del vector clasificado


   para (; ¡él! = dist.end (); it++) {

      stringstream ss;

      pares:: iterator, bool> p = handled.insert (it->distance);

      ¡si (! p.second) continúan; // dirigido ya

      si (0  < printAllEqual="">
           
Otras soluciones  
 
programming4us programming4us