我可以从所需的密钥迭代地图吗?

时间:2011-06-28 00:20:37

标签: c++

我有地图。我需要不是从头开始迭代它,而是从所需的键迭代它。 我试了一下;

  int candidate_s;
  map<int, vector<int> >::iterator map;
  for(map = a_list.begin()+candidate_s; map! = a_list.end(); map++){
      cout<<map->first<<"= ";
      for(vector<int>::iterator vec=map->second.begin(); vec!=map->second.end(); vec++){
          cout<<*vec<<" ";               
      }
  cout<<endl;
  }

我收到以下错误消息:

D:\c_mess\merging\src\main.cpp no match for 'operator+' in '(+a_list)->std::map<_Key, _Tp, _Compare, _Alloc>::begin [with _Key = int, _Tp = std::vector<int, std::allocator<int> >, _Compare = std::less<int>, _Alloc = std::allocator<std::pair<const int, std::vector<int, std::allocator<int> > > >]() + candidate_s' 

请帮我纠正这个问题。

2 个答案:

答案 0 :(得分:3)

您可以使用map::find获取特定键的迭代器。

如果candidate_s应该是一个索引,为什么不使用预定义的向量呢?那么你的查找时间会更快。但是,如果整数键稀疏/具有多种值,则基于矢量的解决方案可能不适用。

答案 1 :(得分:2)

假设candidate_s属于std::map键的类型:

std::map<int, vector<int> >::const_iterator startIt = a_list.find(candidate_s);
for(; startIt != a_list.end(); ++startIt) {
    //Do stuff
}