2010-03-29 9 views
0

STL 목록의 반복자를 맵의 키로 사용하고 싶습니다. 예를 들어<리스트 반복자의 맵에 대한 연산자>

using 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/포함/C를 ++ /4.2.1/bits/stl_function.h:227 : 오류 : '__x< __y'의 '연산자 <'과 일치하지 않음

목록이 벡터로 변경되면 벡터 const_iterators의지도가 잘 컴파일됩니다.

list :: const_iterator에 대해 연산자 <을 정의하는 올바른 방법은 무엇입니까? 사용자 정의 비교와

+1

무엇을 위해? 너는 거기에 아주 이상한기구가있다. :) – GManNickG

+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; 
+2

사용하기 쉽도록 "dereference_compare"로 이름을 바꾸고 템플릿을'operator()'로 옮깁니다. ''const '로''나는''을 가져라. – GManNickG

+0

팁 감사합니다. @GMan. –

+0

도움을 주셔서 감사합니다! 그것은 트릭을했다. –

관련 문제