マップ プロパティを持ち、挿入順序も保持する独自の「単純な」コンテナを実装したいと考えています。boost::multi_index について聞いたことがありますが、私が望むものを理解するのは非常に難しいと思います。
だから私はテンプレート化されたクラスを作りました:
template<typename KEY, typename VALUE>
class MyMap {
private :
std::vector<KEY> m_keys;
std::vector<VALUE> m_values;
public :
void insert(KEY& key, VALUE& val) {
//Test if key exists //
m_keys.push_back(key);
m_values.push_back(val);
}
/* Other methods like erase/size/operator[]/begin/etc. */
};
それをテストするために、私は次のようなことをしたかった:
int main() {
MyMap<string,int> m;
m.insert("test",1);
m.insert("cat",2);
for(auto& item : m) {
cout << item << endl;
cout << m[item] << endl;
}
}
しかし、キーを文字列ではなくbasic_stringに変換するため、挿入(および[])でコンパイルエラーが発生し続けます。それは私を夢中にさせており、答えが見つかりません(または、答えを探すために問題を適切に説明する言葉はありません)。アロケーターと関係があると思いますが、修正方法を理解できません。マップにこの変換を行わせるにはどうすればよいですか?また、他の (独自に実装された) クラスで必要になるため、一般的なままにしますか?
編集:「文字列」の問題を解決した後、&int を待っていたため、int を渡すときに問題が発生しました。kebs のアドバイスに従い、代わりに vector> を実装し、変換の問題を取り除きました... :)