定义<列表迭代器映射的运算符

时间:2010-03-29 04:48:06

标签: c++ list stl comparison map

我想将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?

1 个答案:

答案 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;