翻译C ++片段

时间:2011-09-30 01:20:37

标签: c++

我正在努力将框架从C ++移植到Java,并且它变得比我预期的更难,因为我不太了解C ++。我遇到了一个我不太了解的片段。如果有人能告诉我标记的线条会做什么,那就太棒了。

  /** Heap data, stored as a vector */
  std::vector< std::pair< _Tp, _Val > > data;

  /** Maps objects to their positions in the data vector */
  std::map< _Tp, int> mapping;


  //I understand that this method takes a pair of type <_Tp, _Val>
  template <class _Tp, class _Val>
  void Heap<_Tp,_Val>::push(std::pair< _Tp, _Val > x)
  {
    int index=data.size();

    //Here is where I run into trouble
    //I can't seem to figure out what this line is doing
    //I know it is inserting a Key-Value pair into the map
    //but why is .second being called? and what exactly is this if statement
    //checking?
    if (mapping.insert(std::make_pair(x.first,index)).second)
    {
      data.push_back(x);
      percolate_up(index);
    }
  }

2 个答案:

答案 0 :(得分:5)

  

insert成员函数返回一对bool组件在插入时返回true,如果映射已经包含其键在序列中具有等效值的元素,并且其迭代器为false,则返回false component返回插入新元素的地址或元素已经位于的地址。

因此代码正在向map添加元素,如果该元素尚未存在,则会将数据推送到vector

答案 1 :(得分:3)

此处使用的insert成员函数返回pair<iterator, bool>,如果插入,则bool成员为true。因此,if语句会查看insert调用是否实际向地图添加了记录。

使用C ++时,您可能会发现参考标准库的文档很有用 - here's the MSDN page on map::insert