1

マップ プロパティを持ち、挿入順序も保持する独自の「単純な」コンテナを実装したいと考えています。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> を実装し、変換の問題を取り除きました... :)

4

1 に答える 1