单个对象

时间:2017-11-16 21:00:10

标签: c++ iterator unordered-map

我有一个字符串和一个(string,Object)的unordered_map。我已经有了一些代码,我正在迭代地图:

for(auto& item : map) {
    do_something;
}

我想修改它以在字符串非空时在for循环中执行该部分并在map中找到else else如果string为空则为地图中的所有项执行它。

if(!string.empty()){
    item = map.find(string);
    do_something;
}
else {
    for(auto& item : map) {
        do_something;
    }
}

我可以不重写do_something或创建单独的函数吗?

1 个答案:

答案 0 :(得分:3)

遵循您在评论中提出的思路。您可以通过在特定范围(由迭代器定义)上的常规for循环替换循环范围。要定义它,你需要这样的东西:

auto begin = map.begin(), end = map.end(); // The whole map

if(!string.empty())
  std::tie(begin, end) = map.equal_range(string);
  // constrain range to the single element

for(; begin != end; ++begin) { // loop over it 
  auto& item = *begin;
  // Do something
}

以上的明星是std::unordered_map::equal_range