Решение с картой дало AC, а решение с unordered_map дало WA. Зачем?

Я ищу любую разницу между map а также unordere_map который сейчас известен большинству людей.

Эта проблема : Проблема Ссылка

решение с картой: Принято решение

#include <bits/stdc++.h>
using namespace std;

int main() {
int N;
cin >> N;
map<int,int> mp;
map<int,int> ::iterator it;
int ans = 0;
for(int i=0;i<N;i++){
int X;
cin >> X;
mp[X]++;
}
for(it=mp.begin();it!=mp.end();++it){
int X = it->first;
//cout<<it->first<<" "<<it->second<<endl;
ans = max(ans,mp[(X-1)]+mp[(X)]);
}
cout<<ans<<endl;
return 0;
}

Решение с unordered_map: WA Solution

#include <bits/stdc++.h>
using namespace std;

int main() {
int N;
cin >> N;
unordered_map<int,int> mp;
unordered_map<int,int> ::iterator it;
int ans = 0;
for(int i=0;i<N;i++){
int X;
cin >> X;
mp[X]++;
}
for(it=mp.begin();it!=mp.end();++it){
int X = it->first;
//cout<<it->first<<" "<<it->second<<endl;
ans = max(ans,mp[(X-1)]+mp[(X)]);
}
cout<<ans<<endl;
return 0;
}Input :
98
7 12 13 19 17 7 3 18 9 18 13 12 3 13 7 9 18 9 18 9 13 18 13 13 18 18 17 17 13 3 12 13 19 17 19 12 18 13 7 3 3 12 7 13 7 3 17 9 13 13 13 12 18 18 9 7 19 17 13 18 19 9 18 18 18 19 17 7 12 3 13 19 12 3 9 17 13 19 12 18 13 18 18 18 17 13 3 18 19 7 12 9 18 3 13 13 9 7
Output : 10
Expected Output : 30

Насколько я знаю, единственная разница с map а также unordered_map эта карта содержит ключ в порядке unordered_map не.

-2

Решение

mp[(X-1)] возможно, потребуется вставить новый элемент в карту (если ключ X-1 не присутствовал уже). С std::mapвставка нового элемента не делает недействительными существующие итераторы. С std::unordered_map, это может (если вставка вызывает перефразировку). Когда это произойдет, it становится недействительным и последующее ++it проявляет неопределенное поведение.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]