Вопрос : Помогите мне оптимизировать это Кодего.

Как я останавливаю итерирование когда дистанцияо огромного размера столкнуто?  Я не хочу повторить через весь вектор в 2-ой петле (пока петля). class= " ясное " >
> " codeSnippet " class=
class= " lineNumbers "
class=
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 " class= " " codeSnippet840178 id=
 #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.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);

   уникально (dist.begin (), dist.end (), cmpEntry); // извлекает идентичные дубликаты от сортированного вектора


   для (; оно! = 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;
   }
}
class=

Ответ : Помогите мне оптимизировать это Кодего.

Как в вашем другом q, вы smogли сделать некоторое оптимизируя путем останавливать итерирование когда вы столкнетесь расстояние которое большле чем мы проверять для (в виду того что никакое равное одно не последует за от после этого), например.
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:
size_t printAllEqual (vector& v const, 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;

      //, котор мы можем остановить здесь сталкиваясь расстояния
      // более большое чем одно мы в виду того что вектор
      // сортировало в порядке возрастания (если не, это причинило бы ошибки), то
      Расстояния // более высокие никогда не будут приравнивать ours
      если (i->distance > sa.distance) пролом;
    }

    ++i; 
    bFirst = ложно;
  }

  возвращенный sz;
}
Другие решения  
  •  Как я добавляю кнопки на форме PDF для того чтобы добавить/извлекаю рядки данных?
  •  Шнур ошибки в блоке задвижки?
  •  сколько вариант сервера SQL на одной машине
  •  Внешний вид 2007 не может архивный файл открытой сети сохраненный
  •  Активно директория DNS записывает вопрос
  •  Отчет о доступа 2010 экспорта к CSV с коллекторами?
  •  Прокладчик OCE 9400 не начинает
  •  как добавить десятичное место в формуле в отчете о кристалла seagate
  •  Windows XP и Мичрософт Оутлоок и проблемы установителя Windows
  •  VB6 к VS2010 - консультации тренировки?
  •  
    programming4us programming4us