我可以从所需的键迭代映射吗

Can I iterate a map from a desired key?

本文关键字:迭代 映射 我可以      更新时间:2023-10-16

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

  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_messmergingsrcmain.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' 

请帮我纠正这个问题。

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

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

假设candidate_sstd::map的密钥类型:

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