从vector c ++获取匹配项的索引

时间:2014-03-13 18:51:12

标签: c++ stdvector

我在迭代地图时,地图值类型是矢量。我一个接一个地在地图中获取向量并使用std :: find()方法搜索项目。

for(BoundWaysMap::const_iterator iterator  = boundWays.begin(); iterator != boundWays.end(); iterator++) 
{
    string wayId = iterator->first;
    std::vector<string> nodesRefCollection = iterator->second;

    if(std::find(nodesRefCollection.begin(), nodesRefCollection.end(), id)!=nodesRefCollection.end())
    {
        std::string cont = "|" + wayId;
        legsFrame.append(cont);
        legsCount ++;
        isFound = true;
    }    
}

我想从find方法中获取找到的项目的索引。

3 个答案:

答案 0 :(得分:3)

std::find返回找到的值的迭代器,因此您可以在该迭代器上使用std::distance来获取索引:

std::distance(nodesRefCollection.begin(), std::find(...));

答案 1 :(得分:3)

您可以保留find函数返回的迭代器,如下所示:

  std::vector<string>::iterator iter = std::find(nodesRefCollection.begin(), nodesRefCollection.end(), id);

  if( iter != nodesRefCollection.end() )
  {
    int index = std::distance(nodesRefCollection.begin(), iter);
    std::string cont = "|" + wayId;
    legsFrame.append(cont);
    legsCount ++;
    isFound = true;
  }

答案 2 :(得分:1)

保存std::find返回的迭代器,然后使用std::distance

auto it = std::find(nodesRefCollection.begin(), nodesRefCollection.end(), id);
if (it != nodesRefCollection.end())
{
  auto idx = std::distance(nodesRefCollection.begin(), it);
}

请注意,向量的迭代器也允许您使用-运算符:

auto idx = it - nodesRefCollection.begin();