2013-10-16 48 views
0

我需要知道STL地圖操作使用指針到STL地圖

例如兩個指針之間的區別:使用矢量簡單

vector<pair<int, int> > v; 
v.push_back(make_pair(0, 1)); 
v.push_back(make_pair(2, 3)); 
v.push_back(make_pair(4, 5)); 
v.push_back(make_pair(6, 7)); 
v.push_back(make_pair(8, 9)); 

vector<pair<int, int> >::iterator itrBegin = v.begin(); 
vector<pair<int, int> >::iterator itrEnd = v.end(); 

cout << itrEnd - itrBegin << endl; 

輸出5

不過,我想使用STL地圖執行相同的操作

map<int, int> m; 
m[0] = 1; 
m[2] = 3; 
m[4] = 5; 
m[6] = 7; 
m[8] = 9; 

map<int, int>::iterator itrB = m.begin(); 
map<int, int>::iterator itrE = m.end(); 

cout << ????????????? << endl; 
+0

這本身沒有意義做的工作。它對於矢量是有意義的,因爲元素是有序的。地圖元素沒有以任何定義的順序。 – Adam

+0

明白了,我認爲是不可能的。 –

+0

我有一個使用矢量執行此操作的algorimo。修改STL地圖的結構,我認爲它不會影響。 –

回答

2

關聯容器(列表,集,多集,地圖,多重映射)迭代器是雙向迭代而對於序列容器(載體,雙端隊列),它們的迭代器是隨機訪問迭代

雙向迭代器,只有在運算符下面定義。

Expression Effect 
--iter  Steps backward (returns new position) 
iter--  Steps backward (returns old position) 

這意味着你可以不電話m.end() - m.begin()雙向迭代

隨機訪問迭代器定義了下面的運算符。

Expression  Effect 
iter[n]   Provides access to the element that has index n 
iter+=n   Steps n elements forward (or backward, if n is negative) 
iter-=n   Steps n elements backward (or forward, if n is negative) 
iter+n   Returns the iterator of the nth next element 
n+iter   Returns the iterator of the nth next element 
iter-n   Returns the iterator of the nth previous element 
iter1-iter2  Returns the distance between iter1 and iter2 
iter1<iter2  Returns whether iter1 is before iter2 
iter1>iter2  Returns whether iter1 is after iter2 
iter1<=iter2 Returns whether iter1 is not after iter2 
iter1>=iter2 Returns whether iter1 is not before iter2 

所以使用std::distance,它只要迭代器是InputIterator

6

您可以使用std::distance

std::cout << std::distance(iterB, iterE) << std::endl; 
+0

有趣,我喜歡你的答案,我會測試 –