2013-10-18 7 views
8

मैं string प्रकार के std::vector में स्ट्रिंग खोजने के लिए निम्न कोड का उपयोग कर रहा हूं। लेकिन विशेष तत्व की स्थिति कैसे वापस करें?वेक्टर <string> :: इटरेटर - तत्व की स्थिति कैसे खोजें

कोड:

#include <iostream> 
#include <algorithm> 
#include <vector> 

using namespace std; 

int main() { 
    vector<string> vec; 
    vector<string>::iterator it; 

    vec.push_back("H"); 
    vec.push_back("i"); 
    vec.push_back("g"); 
    vec.push_back("h"); 
    vec.push_back("l"); 
    vec.push_back("a"); 
    vec.push_back("n"); 
    vec.push_back("d"); 
    vec.push_back("e"); 
    vec.push_back("r"); 

    it=find(vec.begin(),vec.end(),"r"); 
    //it++; 

    if(it!=vec.end()){ 
     cout<<"FOUND AT : "<<*it<<endl; 
    } 
    else{ 
     cout<<"NOT FOUND"<<endl; 
    } 
    return 0; 
} 

आउटपुट:

FOUND AT : r

अपेक्षित आउटपुट:

FOUND AT : 9

उत्तर

21

आप उस के लिए std::distance उपयोग कर सकते हैं: निम्नलिखित

auto pos = it - vec.begin(); 
+0

धन्यवाद! मेरी जिज्ञासा से बाहर क्या होगा यदि मेरे वेक्टर में '1000 तत्व' हैं और 'ढूंढ' का उपयोग करना तेज होगा या मुझे कुछ प्रकार के 'सूचक' सरणी का उपयोग करने की आवश्यकता है? – user2754070

+0

@ user2754070 आपको इसे मापना होगा, लेकिन मुझे संदेह है कि आप एक अनुकूलित निर्माण में 'ढूंढ' से तेज़ होंगे। – juanchopanza

3

उपयोग::

if(it != vec.end()) 
    std::cout<< "Found At :" << (it-vec.begin()) ; 
2
#include <iostream> 
#include <algorithm> 
#include <vector> 

using namespace std; 

int main() { 
    vector<string> vec; 
    vector<string>::iterator it; 

    vec.push_back("H"); 
    vec.push_back("i"); 
    vec.push_back("g"); 
    vec.push_back("h"); 
    vec.push_back("l"); 
    vec.push_back("a"); 
    vec.push_back("n"); 
    vec.push_back("d"); 
    vec.push_back("e"); 
    vec.push_back("r"); 

    it=find(vec.begin(),vec.end(),"a"); 
    //it++; 
    int pos = distance(vec.begin(), it); 

    if(it!=vec.end()){ 
     cout<<"FOUND "<< *it<<" at position: "<<pos<<endl; 
    } 
    else{ 
     cout<<"NOT FOUND"<<endl; 
    } 
    return 0; 
+1

कुछ स्पष्टीकरण उपयोगी होगा – Anton

0

इस बयान का प्रयोग करें

auto pos = std::distance(vec.begin(), it); 

एक std::vector::iterator के लिए, आप भी गणित का उपयोग कर सकते :

it = find(vec.begin(), vec.end(), "r") - vec.begin(); 
संबंधित मुद्दे