2013-05-20 1 views
0

지도 반복기를 사용하여 문제가 발생했습니다. 여기있는 누군가가 나를 위해 해결할 수 있기를 바랍니다.C++의 이터레이터를 사용하여지도 탐색

기본적으로, 나는이지도에서 지난 10 키를 반환해야, 그래서 나는이 시도 :

그것은 나에게 다음과 같은 오류주고있다 그러나
for (map<int, char>::iterator i = (singleCountSwitched.end()); i != (singleCountSwitched.end()-10); --i) { 
       cout << (*i).first << ": " << (*i).second << endl; 
      } 

:

main.cpp:150:112: error: no match for ‘operator-’ in ‘singleCountSwitched.std::map<_Key, _Tp, _Compare, _Alloc>::end<int, char, std::less<int>, std::allocator<std::pair<const int, char> > >() - 10’ 

을하는 - 연산자에 대한 지원이 없다고합니다. map.begin() + 10을 사용할 때 유사한 메시지가 throw되었습니다. 반복기를 잘못 사용하고 있습니까? 나는 STL 컨테이너의 반복자가 모두 + 과부하가 걸린 것으로 생각했다.

답변

2
map<int, char>::reverse_iterator r_it_end = singleCountSwitched.rbegin(); 
map<int, char>::reverse_iterator r_it_begin = singleCountSwitched.rbegin(); 
std::advance(r_it_begin, 10); 

당신은 또한 (크기() - 10)와 정상 반복자의 사전을 사용할 수 있습니다 내가이 일

map<int, char>::reverse_iterator r_it_begin = singleCountSwitched.rbegin(); 
std::advance(r_it_begin, 10); 

for (map<int, char>::iterator it = r_it_begin.base(); it != singleCountSwitched.end(); ++it) 
{ 
} 
+0

내가 솔루션을 완전히 이해하고 있는지 잘 모르겠다 - 내가해야하는 일이라면 루프에서 어떻게 사용합니까? 이전에 고급 함수를 사용 해 본적이 없기 때문에 for 루프에서 사용하는 방법을 완전히 모르겠습니다. – wesrobin

+0

루프가있는 다른 예제를 추가했습니다 – Sergi0

+0

좋아요, 작동하는 것 같습니다. 고마워요 Sergi0! – wesrobin

0

더 나은지도 :: 반복자처럼 보이는이 양방향 생각

증분 (increment)을 지원하지만 일부 int의 산술적인 덧셈/뺄셈을 지원하지 않는 반복자 (후자를 지원하는 임의 접근 반복자와 비교).

http://www.cplusplus.com/reference/map/map/end/

가 왜 그냥 감소 10 배?

+0

임의 액세스 반복자가되지 않는 이상한 .. 벡터에는 확실히 산술 연산이 있습니다. 링크 주셔서 감사합니다! – wesrobin

관련 문제