2016-08-24 9 views
6

को क्रमबद्ध std::vector<int> दिया गया है, मैं सी ++ 11-एसटीडी फ़ंक्शंस का उपयोग करके, इंडेक्स को नकारात्मक से सकारात्मक में परिवर्तित करने के लिए, इंडेक्स को ढूंढने के लिए चाहता हूं।दिए गए क्रमबद्ध वेक्टर को नकारात्मक से सकारात्मक

मुझे पता है कि मैं इसे बाइनरी खोज का उपयोग करके कार्यान्वित कर सकता हूं लेकिन मुझे दिलचस्पी है कि मानक लाइब्रेरी में कोई फ़ंक्शन नहीं है, जो find_if के समान है, जो इस खोज को सुविधाजनक बनाएगा (शायद सही लैम्ब्डा अभिव्यक्ति के संबंध में)।

+0

है क्या 'std :: find_if' साथ गलत क्या है? – Rakete1111

+1

@ Rakete1111: find_if रैखिक है, लेकिन समस्या लॉगऑन समय –

+0

@ आर्मेन त्सुनुनियन ट्रू में हल करने योग्य है, इसके अलावा मुझे यह भी पता नहीं है कि इस संदर्भ में find_if का उपयोग कैसे करें – user695652

उत्तर

14

आप lower_bound 0 में से खोजना चाहिए:

auto iter = std::lower_bound(vec.begin(), vec.end(), 0); 

जिसके परिणामस्वरूप इटरेटर जल्द से जल्द स्थान है जहाँ आप तत्वों के आदेश को भंग किए बिना 0 सम्मिलित कर सकते हैं को इंगित करेंगे। इसी तरह, upper_bound सही-इस तरह के इटरेटर को वापस कर देगा।

एल्गोरिथ्म के क्रम O(logN)

+0

शानदार स्थिति से मेल खाता * पहला * तत्व शानदार! :) धन्यवाद – user695652

संबंधित मुद्दे