मान लीजिए कि हमारे पास स्ट्रिंग्स की एक सरणी है, और संदर्भ के लिए एक और स्ट्रिंग है। हमें संदर्भ स्ट्रिंग लेनी है और संदर्भ स्ट्रिंग में वर्णों के क्रम का उपयोग करके हम स्ट्रिंग सरणी को सॉर्ट करेंगे। यहां हम सरणी में स्ट्रिंग्स पर विचार कर रहे हैं, और संदर्भ स्ट्रिंग लोअर केस अक्षरों में है।
मान लीजिए कि स्ट्रिंग सरणी इस प्रकार है:["हैलो", "प्रोग्रामिंग", "विज्ञान", "कंप्यूटर", "इंडिया"], संदर्भ स्ट्रिंग इस प्रकार है:"पिगवक्सब्स्कीहक्ज़ेलुटोएकफजर्नडीएमडब्ल्यू", आउटपुट स्ट्रिंग को सॉर्ट करने के बाद ["प्रोग्रामिंग" जैसा होगा "", "भारत", "विज्ञान", "हैलो", "कंप्यूटर"]
कार्य सरल है। हमें संदर्भ स्ट्रिंग को पार करना होगा, फिर चरित्र को मानचित्र में कुंजी के रूप में और अनुक्रमणिका को मान के रूप में संग्रहीत करना होगा। अब स्ट्रिंग को सॉर्ट करने के लिए, हमें उस मैप के आधार पर स्ट्रिंग्स की तुलना करनी होगी, न कि ASCII कैरेक्टर ऑर्डरिंग। मानचित्र में उन विशेष वर्णों के लिए मैप किए गए मानों की तुलना करें, यदि वर्ण c1 c2 से पहले दिखाई देता है, तो c1 उदाहरण
#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <vector>
using namespace std;
unordered_map<char, int> char_map;
bool compare(string c1, string c2) {
for (int i = 0; i < min(c1.size(), c2.size()); i++) {
if (char_map[c1[i]] == char_map[c2[i]])
continue;
return char_map[c1[i]] < char_map[c2[i]];
}
return c1.size() < c2.size();
}
int main() {
string str = "pigvxbskyhqzelutoacfjrndmw";
vector<string> v{ "hello", "programming", "science", "computer", "india" };
char_map.clear();
for (int i = 0; i < str.size(); i++)
char_map[str[i]] = i;
sort(v.begin(), v.end(), compare);
// Print the strings after sorting
for (auto x : v)
cout << x << " ";
}
के लिए छँटाई के बाद स्ट्रिंग्स को प्रिंट करें आउटपुट
programming india science hello computer