如何获取某个元素在string向量中的位置,将其用作int向量中的索引?
我想获得一个strings
的向量中的元素的索引,使用它作为另一个int
types的向量中的索引,这可能吗?
例:
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::find
和std::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); }