添加到std :: map后获取迭代器?

时间:2014-08-01 05:18:44

标签: c++ map stl

在使用不需要在整个容器中搜索的标准库地图容器时,是否有任何获取迭代器的方法?

我有一个地图的管理类,我希望返回与添加到地图中的项相关联的迭代器。如果可能的话,我不想依赖find()。如果我可以避免搜索,我就会更好。

std::map<char, bool>::iterator ClassA::Add(char item)
{
  mymap[item] = false;
  return mymap.get_iterator_lastitem();
}

也许

return mymap.end() - 1;

1 个答案:

答案 0 :(得分:1)

如果你没有使用C ++ 11,那么

std::map<char, bool>::iterator ClassA::Add(char item)
{
   std::pair<std::map<char, bool>::iterator, bool> result = mymap.insert(std::make_pair(item, false));
   if(!result.second) {
       // Item already exists, modify that existing item
       result.first->second = false;
   }

   return result.first;
}

如果您使用的是C ++ 11,那么最好使用emplace + auto

std::map<char, bool>::iterator ClassA::Add(char item)
{
   auto result = mymap.emplace(item, false);
   if(!result.second) {
      // Item already exists, modify that existing item
      result.first->second = false;
   }

   return result.first;
}

Live example

insertemplace都返回一对迭代器和一个布尔值,迭代器指向插入或现有元素,布尔值表示是否插入(true)发生了或者如果没有(false),返回的迭代器使用键指向已存在的元素。