определение оператора <для отображения итераторов списка - PullRequest
0 голосов
/ 29 марта 2010

Я хотел бы использовать итераторы из списка STL в качестве ключей на карте. Например:

с использованием пространства имен 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: ошибка: нет совпадения для оператора in в __x

Если список изменяется на вектор, карта вектора const_iterators компилируется нормально.

Как правильно определить оператор

1 Ответ

4 голосов
/ 29 марта 2010

Параметр 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;
...