इस लेख में हम C++ STL में नॉन-इनक्रीजिंग ऑर्डर (गैर-बढ़ते क्रम) में सॉर्ट किए गए ऐरे के लिए vector::upper_bound() और vector::lower_bound() पर चर्चा करेंगे।
वेक्टर डायनामिक ऐरे के समान होते हैं; उनमें खुद को संशोधित करने की क्षमता होती है जब भी कंटेनर में कोई मान डाला या हटाया जाता है जहां हम मान संग्रहीत कर रहे होते हैं।
एक वेक्टर में, लोअर बाउंड रेंज में पहले तत्व की ओर इंगित करने वाला एक इटरेटर रिटर्न करता है जो दिए गए मान से कम नहीं होता (यानी greater than or equal to)। अपर बाउंड रेंज में उस तत्व की ओर इंगित करने वाला एक इटरेटर रिटर्न करता है जो दिए गए मान से सख्ती से बड़ा होता है (यानी strictly greater than)।
इनपुट
30 30 30 20 20 20 10 10
आउटपुट
Lower bound of 20 = 3 Upper bound of 20 = 6
इनपुट
9 9 8 8 8 7 7 7 6 6 6 6
आउटपुट
Lower bound of 7 = 5 Upper bound of 7 = 8
रिटर्न वैल्यू
यह रेंज के पहले तत्व की ओर इंगित करने वाला एक इटरेटर रिटर्न करता है और रेंज के अंतिम तत्व की ओर इंगित करने वाला एक इटरेटर भी रिटर्न करता है।
अनुसरण की जाने वाली दृष्टिकोण
- सबसे पहले, हम वेक्टर को इनिशियलाइज़ करते हैं।
- फिर हम वेक्टर एलिमेंट्स को नॉन-इनक्रीजिंग ऑर्डर में सॉर्ट करते हैं।
- फिर हम उसका लोअर बाउंड ढूंढते हैं।
- फिर हम उसका अपर बाउंड ढूंढते हैं।
- अंत में हम दोनों बाउंड्स को प्रिंट करते हैं।
उपरोक्त दृष्टिकोण का उपयोग करके, हम किसी भी वेक्टर का लोअर बाउंड और अपर बाउंड ढूंढ सकते हैं, लोअर और अपर बाउंड ढूंढने के लिए वेक्टर को सॉर्ट करना आवश्यक है। यदि वेक्टर सॉर्ट नहीं है, तो हम उसका बाउंड नहीं ढूंढ सकते।
उदाहरण
// C++ प्रोग्राम लोअर बाउंड और अपर बाउंड के काम को प्रदर्शित करने के लिए
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int vect[] = {13, 13, 13, 16, 16, 16, 17, 17, 17, 17, 18, 18};
vector<int> v(vect, vect + 12);
sort(v.begin(), v.end(), greater<int>());
cout << "\n Sorted Vector: ";
for (auto i = v.begin(); i != v.end(); ++i)
cout << *i << " ";
vector<int>::iterator low, up;
low = lower_bound(v.begin(), v.end(), 17, greater<int>());
up = upper_bound(v.begin(), v.end(), 17, greater<int>());
cout << "\n Lower bound: " << (low - v.begin()) << "\n";
cout << " Upper bound: " << (up - v.begin()) << "\n";
return 0;
}
आउटपुट
Sorted Vector: 18 18 17 17 17 17 16 16 16 13 13 13 Lower bound = 2 Upper bound = 6
उदाहरण
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int vect[] = {5, 5, 5, 5, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10, 10};
vector<int> v(vect, vect + 16);
sort(v.begin(), v.end(), greater<int>());
cout << "\n Sorted Vector: ";
for (auto i = v.begin(); i != v.end(); ++i)
cout << *i << " ";
vector<int>::iterator low, up;
low = lower_bound(v.begin(), v.end(), 8, greater<int>());
up = upper_bound(v.begin(), v.end(), 8, greater<int>());
cout << "\n Lower bound: " << (low - v.begin()) << "\n";
cout << " Upper bound: " << (up - v.begin()) << "\n";
return 0;
}
आउटपुट
Sorted Vector: 10 10 9 9 9 8 8 8 8 7 7 7 5 5 5 5 Lower bound = 5 Upper bound = 9