我有一個類,我已經爲其定義了比較運算符。以下是我的代碼寫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