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 <Instance. map需要能够对键进行排序并需要此功能。如果您不想定义operator <,则需要提供一个比较函数作为 的第三个模板参数map,即std::map<Instance, float, compare_instances>.

... 想一想,您确定要Instance作为键和float数据,而不是相反?即您正在地图中搜索Instance以得到 afloat的回报?

于 2012-01-05T00:54:11.153 回答
1

你不operator<提供MyClass. 它是必需的std::map。您有两个选择:提供一个比较器作为第三个模板参数,map或者在MyClass.

于 2012-01-05T00:50:54.697 回答
0

这与“动态绑定”无关(无论如何,这不是这里的意思)。您的班级需要有一个订单才能放入地图。它需要运算符<。

于 2012-01-05T00:52:03.220 回答