如何获取某个元素在string向量中的位置,将其用作int向量中的索引?

我想获得一个strings的向量中的元素的索引,使用它作为另一个inttypes的向量中的索引,这可能吗?

例:

 vector <string> Names; vector <int> Numbers; ... // condition to check whether the name exists or not if((find(Names.begin(), Names.end(), old_name_)) != Names.end()) { // if yes cout <<"Enter the new name."<< endl; cin >> name; replace(Names.begin(), Names.end(), old_name_, name); } 

现在我想要获取Names向量中old_name的位置,以便在访问Numbers向量中的某个元素时使用它。 所以我可以说:

 Numbers[position] = 3 ; // or whatever value assigned here. 

我试过使用:

 vector <string> :: const_iterator pos; pos = (find(Names.begin(), Names.end(), old_name_)) Numbers[pos] = 3; 

但显然这是行不通的,因为pos是stringtypes!

要知道一个指向元素的迭代器的向量中元素的位置,只需从迭代器中减去v.begin()即可:

 ptrdiff_t pos = find(Names.begin(), Names.end(), old_name_) - Names.begin(); 

现在,您需要检查Names.size() pos以查看它是否超出范围:

 if(pos >= Names.size()) { //old_name_ not found } 

向量迭代器的行为类似于数组指针; 大部分关于指针算术的知识也可以应用到向量迭代器中。

从C ++ 11开始,您可以使用std::distance来代替迭代器和指针的相减:

 ptrdiff_t pos = distance(Names.begin(), find(Names.begin(), Names.end(), old_name_)); 

如果你想要一个索引,你可以使用std::findstd::distance

 auto it = std::find(Names.begin(), Names.end(), old_name_); if (it == Names.end()) { // name not in vector } else { auto index = std::distance(Names.begin(), it); }