ধরুন আমাদের একটি স্ট্রিং অ্যারে আছে, আর একটি রেফারেন্স স্ট্রিং আছে। আমাদের রেফারেন্স স্ট্রিং নিব এবং তার ক্যারেক্টার들의 অর্ডার ব্যবহার করে স্ট্রিং অ্যারে সর্ট করব। এখানে আমরা অ্যারেতে থাকা স্ট্রিংগুলো এবং রেফারেন্স স্ট্রিং লোয়ারকেস লেটার হিসেবে বিবেচনা করছি।
ধরুন স্ট্রিং অ্যারে: ["hello", "programming", "science", "computer", "india"], রেফারেন্স স্ট্রিং: "pigvxbskyhqzelutoacfjrndmw", সর্ট করার পর আউটপুট: ["programming", "india", "science", "hello", "computer"]
টাস্কটি সহজ। রেফারেন্স স্ট্রিং ট্রাভার্স করে ক্যারেক্টারকে ম্যাপে কী হিসেবে এবং ইনডেক্সকে ভ্যালু হিসেবে স্টোর করুন। এখন স্ট্রিং সর্ট করতে হলে ASCII অর্ডার না ব্যবহার করে ম্যাপের ভ্যালু ব্যবহার করে কম্পেয়ার করতে হবে। যদি ক্যারেক্টার c1, c2-এর আগে আসে, তবে c1 < c2।
উদাহরণ
#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