我想将STL列表中的迭代器用作映射中的键。例如:
使用namespace std;
list<int> l
;
map<list<int>::const_iterator, int> t;
int main(int argv,char * argc){
l.push_back(1);
t [l.begin()] = 5;
}
但是,列表迭代器没有定义比较运算符(与随机访问迭代器不同),因此编译上面的代码会导致错误:
/ usr / include / c ++ / 4.2.1 / bits / stl_function.h:227:错误:'__ x&lt;中'运算符&lt;'不匹配__y”
如果列表更改为向量,则向量const_iterators的映射编译正常。
定义运算符的正确方法是什么? for list :: const_iterator?
答案 0 :(得分:4)
带有自定义比较器的参数map
:
struct dereference_compare {
template <class I>
bool operator()(const I& a, const I& b) {
return *a < *b;
}
};
map<list<int>::const_iterator, int, dereference_compare> t;