2012-08-31 42 views
1

我有一個multimap<pair<string,string>,vector> > mmap; ,我想遍歷它有兩個循環:屈德寧與關鍵=對

  1. 關鍵的第一個元素:key.first
  2. 然後key.second

equal_range方法在這種情況下工作嗎? 如何寫它?

pair<multimap<pair<string,string>,vector>::iterator, 
multimap<pair<string,string>,vector>::iterator> key_range = mmap.equal_range(??); 
+0

什麼類型是mmap? – Graeme

+0

multimap ,vector>> mmap; – Eric

回答

4

multimap只支持單個訂貨,這對於pair將默認情況下通過兩個元素的字典序進行:

(A, A) (A, B) ... (A, Z) (B, A) (B, B) ... (B, Z) ... (Z, A) ... (Z, Z) 

如果通過兩個不同的密鑰需要索引你最好使用另一個容器例如Boost.MultiIndex。你可以通過自己的方式達到同樣的效果。將項目存儲在list中,並保存從一個鍵到列表迭代器的映射:

list<vector> items; 
map<string, list<vector>::iterator> index1; 
map<string, list<vector>::iterator> index2;