このマルチマップの実装をC++で作成しようとしましたが、values.size()が正解を返したとしても、ベクトル「values」にアクセスしようとするとセグメンテーション違反が発生します。
22行目でセグメンテーション違反が発生していることは知っていますが、理由はわかりません。助けていただければ幸いです。
#include <iostream>
#include <vector>
#include <string.h>
using namespace std;
template<class DT1,class DT2>
class Pair
{
public:
Pair(DT1 key_in, DT2 value_in)
{
key = key_in;
values.push_back(value_in);
}
DT1 key;
vector<DT2> values;
int insert_value(DT2 item)
{
bool value_found = false;
cout << "values size "<<values.size() << endl;
cout << "test " << values[0] << endl;
for (unsigned int i = 0; i < values.size(); i++)
{
cout <<"i " << i << endl;
if (values[i] == item)
value_found = true;
}
if (value_found == false)
{
cout<<"not found"<<endl;
values.push_back(item);
}
return 0;
}
};
template<class T1, class T2>
class MultiMap
{
public:
MultiMap() {};
vector<Pair<T1, T2> > pair_container;
int insert(T1 key_in, T2 value_in)
{
bool key_found = false;
unsigned int i;
for (i = 0; i < pair_container.size(); i++)
{
if (pair_container[i].key == key_in)
key_found = true;
}
if (key_found == false)
pair_container.push_back(Pair<T1,T2>(key_in, value_in));
if (key_found == true)
{
pair_container[i].insert_value(value_in); // seg fault
}
return 0;
}
};
int main()
{
MultiMap<char, string> Map1;
Map1.insert('a', "anchor");
cout << Map1.pair_container[0].values[0] << endl;
Map1.insert('a', "application"); // seg fault
cout << "hello!"<<endl;
Map1.insert('b', "boolean");
return 0;
}