我在迭代地图时,地图值类型是矢量。我一个接一个地在地图中获取向量并使用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方法中获取找到的项目的索引。
答案 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();