3

マップ内でいくつかのベクトルをソートしようとしていますが、プログラムを実行するとセグメンテーション違反が発生します。

typedef map<int, vector<int> > Map;
Map m;
for (Map::iterator it = m.begin(); it != m.end(); ++it) {
  sort(it->second.begin(), it->second.end());
}

並べ替えの直前に、データを挿入するセクションがあります。

int x = 2;
int y = 3;
map<int, vector<int> >::iterator itTemp;

itTemp = FontaneMapX.find(x);
if (itTemp == m.end())
    itTemp = m.insert(make_pair(x,vector<int>())).first;
itTemp->second.push_back(y);

このセクションの後にアイテムを削除/追加したり、マップ内のベクトルにイベントを追加したりしません。

何を変更すべきかについてのアイデアはありますか?

4

2 に答える 2

0

この実装がうまく機能していることを確認してください ( http://ideone.com/QACBSZ )

#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;

map<int ,vector<int> > mp;
map<int, vector<int> >::iterator it;

int main() {
    int n;
    cin >> n;

    for(int i=0;i<n;i++){
        int m;
        cin >> m;
        vector <int> v(m);
        
        for(int j=0; j < m; j++)
            cin >> v[j];
        
        for(int j=0; j < m; j++)
            cout << v[j] << " ";
        
        cout << endl;
    
        mp.insert(make_pair(i,v));
    }

    for(it = mp.begin(); it != mp.end(); it++)
        sort(it->second.begin(), it->second.end());
    

    for(it = mp.begin(); it != mp.end(); it++){
        int l = it->second.size();
        cout << it->first << "th sorted array-> ";
        
        for(int j = 0; j < l; j++)
            cout << it->second[j] << " ";
        
        cout << endl;
    }
    return 0;
}
于 2014-07-05T21:55:58.103 に答える