我有一个类,我已经为其定义了比较运算符。以下是我的代码写STL为相同的用户定义类型设置和映射
#include <set>
#include <map>
#include <list>
template <typename _TyV>
class Element {
public:
Element(_TyV in) : m_Label(in){}
~Element() {}
bool operator < (const Element & right) const {
return m_Label < right.m_Label;
}
private:
_TyV m_Label;
protected:
};
typedef Element<int> ElementType;
int main (int argc, char **argv) {
std::set<ElementType> mySet;
for (int i = 0; i < 10; i++) {
mySet.insert(ElementType(i));
}
std::map<ElementType*, std::list<ElementType*> > myMapList;
return 0;
}
我迷惑于如何我std::map
会工作,因为我感兴趣的std::map
元素是指向ElementType
。我真正想要的是存储在std::set
实际数据,并在std::map
主要混淆使用指针,以这些元素是围绕less than operator
ElmentType在这个例子中很便宜,但我希望我的库能够处理重和大的对象,并试图找出避免不必要的副本的选项。根据你的解释,你认为我也可以有迭代器的std :: map。即关键的地图将在迭代器std :: set – Avinash
@Avinash:不,''set :: iterator'不是一个随机访问迭代器,所以它没有'operator <'(或者一个'std :: less'专业化)。 –
即使使用自定义比较器,这也行不通? – Avinash