2014-06-10 8 views
22

मुझे तत्वों की एक सूची मिली है, कहें, पूर्णांक और मैं यह जांचना चाहता हूं कि मेरा चर (दूसरा पूर्णांक) सूची के तत्वों में से एक है या नहीं। पायथन में मैं करता हूं:जांचें कि क्या तत्व सूची में है (0)

my_list = [1,2,3,4] # elements 
my_var = 3 # my variable 
my_var in my_list # returns boolean 

सी ++ में ऐसा कैसे करें? मैंने std::list का उपयोग करने के बारे में सोचा, लेकिन मुझे इसमें find विधि नहीं मिल सकती है। मैं std::set संरचना में ऐसी विधि देख सकता हूं।

अधिक गहराई से, समस्या यह है कि मेरे कार्यक्रम को कुछ अद्वितीय आईडी (एक सूची, एक सेट, जो कुछ भी) दिया जाता है और मैं इनपुट डेटा (आईडी) की एक लंबी सूची में पुनरावृत्ति करता हूं और जांच करता हूं कि क्या वे सूची में शामिल हैं (प्रत्येक पुनरावृत्ति चरण के लिए बूलियन मान लौटाया गया)। और मुझे यकीन नहीं है कि मैं इसे C++ में कैसे करना चाहिए।

+3

std :: वेक्टर। सी ++ में std :: वेक्टर का उपयोग करें जब तक आपके पास विशेष कारण न हो। – user1937198

+0

'std :: find' एक कंटेनर में तत्वों को देखने का तरीका है – Andro

+0

यदि आप मूल्यों को देख रहे हैं तो वेक्टर का उपयोग क्यों करें? निश्चित रूप से आप एक 'std :: set' या 'std :: multiset' चाहते हैं, एक रैखिक खोज से बेहतर प्रदर्शन देने के लिए जब तक कि आपकी सूची छोटी न हो या आप एक स्पैस वेक्टर और इंडेक्स पर कुंजीिंग का उपयोग कर रहे हों। –

उत्तर

37

आप उपयोग कर सकते हैं std::find

bool found = (std::find(my_list.begin(), my_list.end(), my_var) != my_list.end()); 

आप <algorithm> शामिल करने के लिए की जरूरत है। यह मानक कंटेनर, वैक्टर सूचियों, आदि पर काम करना चाहिए ...

+28

.. हमेशा सी ++ के साथ हमेशा के रूप में concise। किसके पास एक छोटी विधि की आवश्यकता है जैसे 'है() '?! – Jay

+0

@Alex: नामकरण फिक्स्ड। – Matzi

+2

मुझे लगता है कि सी # -स्टाइल एक्सटेंशन विधियों के लिए समर्थन जोड़ने की तरह मैं कभी भी सी ++ के बारे में हर शिकायत को ठीक कर दूंगा। – BTownTKD

3

आप #include <algorithm>, तो आप उपयोग कर सकते हैं चाहिए std::find

11

std::list एक खोज विधि प्रदान नहीं करता है। आप सूची में पुन: प्रयास कर सकते हैं और जांच सकते हैं कि तत्व मौजूद है या std::find का उपयोग करें। लेकिन मुझे लगता है कि आपकी स्थिति std::set अधिक बेहतर है। पूर्व O(n) समय लेगा लेकिन बाद में खोज करने के लिए O(lg(n)) समय लगेगा।

आप बस का उपयोग कर सकते हैं:

if(mySet.find(myVar) != mySet.end()){ 
     //do whatever 
} 
+1

'myset.count (myVar)! = 0' बेहतर हो सकता है –

1

उपयोग std::find, की तरह कुछ:

if (std::find(std::begin(my_list), std::end(my_list), my_var) != std::end(my_list)) 
    // my_list has my_var 
संबंधित मुद्दे