Ala*_*ley 5 c++ associative-array stl
我是STL的新手.关于使用地图存储任意对象的事情让我很难过:
std::map<MyClassObj, MyDataObject> MyMap;
Run Code Online (Sandbox Code Playgroud)
是我如何找到对象.MyMap.find(MyClassObjInstance)如何工作?我是否需要实现自己的迭代器并提供一些标准函数,其中包括一些等价函数?任何例子将不胜感激.
是否有另一种方法来使用标准库存储任意对象的关联列表?我已经在使用stl来维护平台的可移植性,并且不希望像BOOST那样添加另一个库依赖项.
std::map在键和值之后有第三个模板参数,表示将用于比较键的函数.默认情况下,它是std::less,它反过来使用operator<.因此,如果你的班级有一个操作员<,没关系,否则你可以提供自己的比较器.
所有你需要的是明确operator<的MyClassObj.有关std :: map的更多信息,请参阅此处.
根据C++标准23.1.2:
短语"等价键"是指比较所强加的等价关系,而不是操作符= =键.也就是说,如果对于比较对象comp,comp(k1,k2)== false && comp(k2,k1)== false,则认为两个密钥k1和k2是等效的.
默认comp是std::less.
根据C++标准20.3.3:
Run Code Online (Sandbox Code Playgroud)template <class T> struct less : binary_function<T,T,bool> { bool operator()(const T& x, const T& y) const; }; // operator() returns x < y.
当然,您可以定义独立仿函数comp进行比较.
| 归档时间: |
|
| 查看次数: |
1013 次 |
| 最近记录: |