development

ints 벡터의 인덱스로 사용하기 위해 strings 벡터에서 특정 요소의 위치를 ​​얻는 방법은 무엇입니까?

big-blog 2020. 8. 29. 12:25
반응형

ints 벡터의 인덱스로 사용하기 위해 strings 벡터에서 특정 요소의 위치를 ​​얻는 방법은 무엇입니까?


의 벡터에서 요소의 인덱스를 가져와 strings다른 int유형의 벡터에서 인덱스로 사용하려고 하는데 이것이 가능합니까?

예:

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);
    }

지금은 위치를 얻으려면 old_name에서 Names특정 요소를 액세스에서 사용하는 벡터 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유형 문자열 이기 때문에 작동하지 않습니다 !


요소를 가리키는 반복기를 알고있는 벡터에서 요소의 위치를 ​​얻으려면 반복기 v.begin()에서 빼면 됩니다.

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

지금 당신은 확인해야 pos대하여 Names.size()그 경계 여부를 밖으로 있는지 :

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);
}

저는 초보자이므로 여기에 초보자 답변이 있습니다. for 루프의 if는 다른 벡터의 Numbers [i]와 같이 필요할 때 사용할 수있는 i를 제공합니다. 대부분은 예를 들어 보풀이며, for / if는 실제로 모든 것을 말합니다.

int main(){
vector<string>names{"Sara", "Harold", "Frank", "Taylor", "Sasha", "Seymore"};
string req_name;
cout<<"Enter search name: "<<'\n';
cin>>req_name;
    for(int i=0; i<=names.size()-1; ++i) {
        if(names[i]==req_name){
            cout<<"The index number for "<<req_name<<" is "<<i<<'\n';
            return 0;
        }
        else if(names[i]!=req_name && i==names.size()-1) {
            cout<<"That name is not an element in this vector"<<'\n';
        } else {
            continue;
        }
    }

참고 URL : https://stackoverflow.com/questions/15099707/how-to-get-position-of-a-certain-element-in-strings-vector-to-use-it-as-an-inde

반응형