使用map的解决方案给出AC和解决方案,unordered_map给了WA。为什么?

时间:2017-03-31 12:58:40

标签: c++ c++11 dictionary unordered-map keymaps

我正在寻找public void taskToAssessment() { toolbar.animate().translationY(toolbar.getTop()).setInterpolator(new AccelerateInterpolator()).start(); FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.setCustomAnimations(R.anim.left_in, R.anim.left_out); AssessmentFragment af = new AssessmentFragment(); ft.replace(R.id.mainFragment, af); ft.addToBackStack(null); ft.commit(); } map之间的差异,现在大多数人都知道。{/ p>

问题:Problem Link

地图解决方案:Accepted Solution

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; } WA Solution

的解决方案
unordered_map

据我所知,只有#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则没有。

1 个答案:

答案 0 :(得分:2)

mp[(X-1)]可能需要在地图中插入新元素(如果密钥X-1尚未出现)。对于std::map,插入新元素不会使任何现有迭代器无效。使用std::unordered_map,它可能(如果插入恰好触发重新散列)。如果是,it将变为无效,后续++it会显示未定义的行为。