我正在努力将框架从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);
}
}
答案 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。