0

以前はC++でテンプレートと動的バインディングの両方を使用していましたが、最近それらを一緒に使用しようとすると、コンパイルが不可能であることがわかりました。

私がやろうとしていることは次のようなものです:

     std::map<MyClass, unsigned int> mymap;

MyClassは、動的メモリバインディングを利用するクラスです。数時間検索した後、これはまだ解決できない影響を引き起こしているという印象を受けたので、この問題とその解決方法についてのガイダンスを期待していました。

私の最終的な目標は、次のようなことができるようにすることです。

std::vector<MyClass> MyClassPool;
//fill the vector with MyClass objects...
for(usigned int i=0 ; i<MyClassPool.size() ; i++)
{
    mymap[ MyClassPool[i] ] = i;
}

さまざまな方法でポインタを使用してみましたが、機能せず、何ができるかわかりません。

上記で次のエラーが発生します。

/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_function.h: In member function `bool std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = Instance]':

/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_map.h:338:   instantiated from `_Tp& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&) [with _Key = Instance, _Tp = float, _Compare = std::less<Instance>, _Alloc = std::allocator<std::pair<const Instance, float> >]'

/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_function.h:227: error: no match for 'operator<' in '__x < __y'
4

3 に答える 3

2

そのコンパイル エラーは、 がoperator <定義されていないことを意味しますInstancemapキーをソートできる必要があり、この機能が必要です。を定義したくない場合は、比較関数を の 3 番目のテンプレートoperator <パラメータとして提供する必要があります。mapstd::map<Instance, float, compare_instances>

... 考えてみるとInstance、キーfloatとしてもデータとしても必要であり、その逆ではありませんか? つまり、マップ内で を検索してInstanceを取得していfloatますか?

于 2012-01-05T00:54:11.153 に答える
1

operator<あなたは提供していませんMyClass。によって必要とされstd::mapます。2 つのオプションがあります。コンパレータを 3 番目のテンプレート引数として指定し、mapOR で演算子を実装しMyClassます。

于 2012-01-05T00:50:54.697 に答える
0

これは「動的バインディング」とは何の関係もありません (とにかくここで意味するものではありません)。クラスには、マップに配置する順序が必要です。演算子 < が必要です。

于 2012-01-05T00:52:03.220 に答える