सॉर्ट किए गए वेक्टर में तत्वों की एक श्रृंखला खोजने के लिए std::equal_range
का उपयोग करें। std::equal_range
इटरेटर के std::pair
लौटाता है, जो आपको प्रदान किए गए तर्क के बराबर तत्वों के वेक्टर में एक रेंज देता है। यदि सीमा खाली है, तो आपका आइटम वेक्टर में नहीं है, और सीमा की लंबाई आपको बताती है कि वेक्टर में आपका आइटम कितनी बार दिखाई देता है।
यहाँ struct Node
के बजाय ints का उपयोग कर एक उदाहरण है:
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
int main(int argc, const char * argv[])
{
std::vector<int> sorted = { 1, 2, 2, 5, 10 };
auto range = std::equal_range(sorted.begin(), sorted.end(), 20);
// Outputs "5 5"
std::cout << std::distance(sorted.begin(), range.first) << ' '
<< std::distance(sorted.begin(), range.second) << '\n';
range = std::equal_range(sorted.begin(), sorted.end(), 5);
// Outputs "3 4"
std::cout << std::distance(sorted.begin(), range.first) << ' '
<< std::distance(sorted.begin(), range.second) << '\n';
range = std::equal_range(sorted.begin(), sorted.end(), -1);
// Outputs "0 0"
std::cout << std::distance(sorted.begin(), range.first) << ' '
<< std::distance(sorted.begin(), range.second) << '\n';
return 0;
}
struct Node
के साथ इस काम करने के लिए आप या तो struct Node
के लिए एक operator <
प्रदान करने या std::equal_range
करने के लिए एक तुलनित्र में पारित करने के लिए होगा। आप अपने structs की तुलना करने के लिए std::equal_range
पर एक लैम्बडा प्रदान करके ऐसा कर सकते हैं।
std::vector<Node> nodes = { Node{"hello", 5}, Node{"goodbye", 6} };
Node searchForMe { "goodbye", 6 };
auto range = std::equal_range(nodes.begin(), nodes.end(), searchForMe,
[](Node lhs, Node rhs) { return lhs.id < rhs.id; });
क्या आप सीएसटींग के बीच कॉमा के बारे में निश्चित हैं? क्या वह अर्धविराम नहीं होना चाहिए? – razeh