带键=对的多重映射

时间:2012-08-31 12:04:18

标签: c++ stl map

我有multimap<pair<string,string>,vector> > mmap; 我想用两个循环迭代它:

  1. 关键字的第一个元素:key.first
  2. 然后key.second
  3. equal_range方法在这种情况下是否有效? 怎么写呢?

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

1 个答案:

答案 0 :(得分: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;