• 締切済み

vectorの中にmap

vectorの中にmapを入れて 添字:ノードID [どのノードから来たのか|それまでのコスト] を表現しようと考えています. #include<iostream> #include<vector> #include<map> #include<list> // MACROS #define UNDEF -1 // PROTOTYPE DCLARE void init_path(std::vector<std::map<char, int> >, int size); int main(void) { //source -> source node // //size -> the number of node // //path -> store path infomation // ex: // path[1]: 1 is node id // char : from node id // cost : how cost from source to here // //adj -> show adjacency list eace node int source; int size; std::vector<std::map<char, int> > path; std::vector<std::list<char> > adj; size = 5; std::cout << "before" << std::endl; init_path(path, size); std::cout << "after" << std::endl; std::map<char, int>::iterator it; for(int i = 0; i < size; i++) { it = path[i].begin(); // std::cout << it->first << ":" << it->second << std::endl; } return 0; } void init_path(std::vector<std::map<char, int> > path, int size) { std::map<char, int> init; init.insert( std::map<char, int>::value_type('-', UNDEF) ); for(int i = 0; i < size ; i++) { path.push_back(init); } return; } *結果 before after Segmentation fault となり初期化をする所までは正常に動いたっぽいのですが どこが悪いのかわかりません(おそらくイテレータあたりかと思うのですが・・・・ 具体的にどうしたらいいのか分からないのでご指導ねがいます.

みんなの回答

  • oldman50
  • ベストアンサー率29% (8/27)
回答No.2

具体的に何をどうしたいのか分からないのですが、 int source; int size = 5; std::vector<std::map<char, int> > path(size); std::vector<std::list<char> > adj; //size = 5; std::cout << "before" << std::endl; init_path(path, size); std::cout << "after" << std::endl; std::map<char, int>::iterator it; for(int i = 0; i < size; i++) { it = path[i].begin(); std::cout << it->first << ":" << it->second << std::endl; } とすると、いちおう結果が出ます。 before after :0 :0 :0 :0 :0

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

void init_path(std::vector<std::map<char, int> > path, int size) { が、 void init_path(std::vector<std::map<char, int> >& path, int size) { の間違いでは。(初期化してないじゃん)

関連するQ&A