функция c sort() не сортирует мой вектор

#c #sorting

Вопрос:

Это мой код —

Проблема: Функция компаратора сортировки, которую я написал, ничего не делает. код выполняется, функция компаратора также запускается, но она не изменяет мой вектор. И я не понимаю, почему.

Логика(которую я написал):

  1. Я использовал индекс региона в качестве индекса моего вектора. Для каждого региона я сохранил вектор (точки, фамилия).
  2. Затем для каждого региона я отсортировал свой вектор в соответствии с их точками.
  3. затем я проверил, нет ли репутации в очках на первой позиции и второй позиции, по сравнению со второй и третьей позициями, это означает, что у нас есть явный победитель, запишите их.
  4. Распечатайте зарегистрированных победителей.
 #include lt;algorithmgt; #include lt;iostreamgt; #include lt;mapgt; #include lt;vectorgt; using namespace std;  int main() {  int participants, regions;  cin gt;gt; participants gt;gt; regions;  vectorlt;vectorlt;pairlt;int, stringgt;gt;gt; cands(regions);  string surname;  int region, points;  for (int i{0}; ilt;participants; i  ) {  cin gt;gt; surname gt;gt; region gt;gt; points;  cands[region-1].push_back({points, surname});  }  for (auto vec : cands) {  sort(vec.rbegin(), vec.rend(), [](pairlt;int, stringgt;amp; x, pairlt;int, stringgt;amp; y) {  return x.first gt; y.first;  });  }  // for (auto vec : cands) {  // for (auto ele : vec) cout lt;lt; ele.first lt;lt; " " lt;lt; ele.second lt;lt; endl;  // cout lt;lt; endl;  // }  vectorlt;pairlt;string, stringgt;gt; teams;  for (auto vec : cands) {  if (vec[0].first == vec[1].first) teams.push_back({"?", ""});  else {  if (vec.size() gt; 2) {  if (vec[1].first == vec[2].first) teams.push_back({"?", ""});  else teams.push_back({vec[0].second, vec[1].second});  } else teams.push_back({vec[0].second, vec[1].second});  }  }  for (auto ele : teams) cout lt;lt; ele.first lt;lt; " " lt;lt; ele.second lt;lt; endl;  return 0; }  

Ответ №1:

 for (auto vec : cands) {  

Это создает копию элементов внутри cands , а не самого элемента cands .

Измените свой код на:

 for (auto amp;vec : cands) {