プロが教える店舗&オフィスのセキュリティ対策術

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

となり初期化をする所までは正常に動いたっぽいのですが
どこが悪いのかわかりません(おそらくイテレータあたりかと思うのですが・・・・

具体的にどうしたらいいのか分からないのでご指導ねがいます.

A 回答 (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
    • good
    • 0

void init_path(std::vector<std::map<char, int> > path, int size) {


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!