#c #sorting
Вопрос:
Это мой код —
Проблема: Функция компаратора сортировки, которую я написал, ничего не делает. код выполняется, функция компаратора также запускается, но она не изменяет мой вектор. И я не понимаю, почему.
Логика(которую я написал):
- Я использовал индекс региона в качестве индекса моего вектора. Для каждого региона я сохранил вектор (точки, фамилия).
- Затем для каждого региона я отсортировал свой вектор в соответствии с их точками.
- затем я проверил, нет ли репутации в очках на первой позиции и второй позиции, по сравнению со второй и третьей позициями, это означает, что у нас есть явный победитель, запишите их.
- Распечатайте зарегистрированных победителей.
#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) {