2015-02-23 101 views
-3
#include<vector> 
#include<algorithm> 
#include<iostream> 
using namespace std; 

int main() { 
    map<int, int> score; 
    int n; 
    cin >> n; 
    while(n--){ 
     int a,b; 
     cin >> a >> b; 
     score[a] = score[a] + b; 
    } 
    cout << score.rbegin()->first << " " << score.rbegin()->second << endl; 
    return 0; 
} 

錯誤消息是16254段錯誤:: 11。退出代碼:139.你能否說爲什麼在使用地圖容器時經常發生分段錯誤。爲什麼我在這個小程序中出現分段錯誤?

+0

你用什麼輸入來運行程序? – 2015-02-23 16:01:59

+2

兩次評分[a]'當然是效率低下的,我並不是100%相信它是定義明確的(儘管我確信有足夠的序列來擺脫它)。我會寫'score [a] + = b;' – 2015-02-23 16:04:20

+0

@MikeSeymour不是標準保證對於任務,rhs將首先被評估?也許我讀錯了,但這裏是我發現:「內置賦值運算符和所有內置複合賦值運算符的副作用(左邊參數的修改)在值計算後排序(但而不是副作用),並且在賦值表達式的值計算之前(即在將引用返回到修改對象之前)排序「 – 2015-02-23 16:43:31

回答

2

如果n0,則永遠不會填充score,然後繼續訪問score中的元素,而不檢查其是否爲空。

通常,在使用它之前總是要證明一個迭代器是有效的。

相關問題