Computer >> Máy Tính >  >> Lập trình >> C ++

Sắp xếp mảng chuỗi theo thứ tự bảng chữ cái được xác định bởi một chuỗi khác trong C ++

Giả sử chúng ta có một mảng chuỗi và một chuỗi khác ở đó để tham chiếu. Chúng ta phải lấy chuỗi tham chiếu và sử dụng thứ tự của các ký tự trong chuỗi tham chiếu, chúng ta sẽ sắp xếp mảng chuỗi. Ở đây chúng tôi đang xem xét các chuỗi trong mảng và chuỗi tham chiếu là các chữ cái thường.

Giả sử mảng chuỗi có dạng:[“hello”, “programming”, “science”, “computer”, “india”], thì chuỗi tham chiếu có dạng:“pigvxbskyhqzelutoacfjrndmw”, sau khi sắp xếp chuỗi đầu ra sẽ giống như [“programming ”,“ Ấn Độ ”,“ khoa học ”,“ xin chào ”,“ máy tính ”]

Nhiệm vụ rất đơn giản. Chúng ta phải duyệt qua chuỗi tham chiếu, sau đó lưu ký tự vào bản đồ dưới dạng khóa và chỉ mục dưới dạng giá trị. Bây giờ để sắp xếp chuỗi, chúng ta phải so sánh các chuỗi dựa trên bản đồ đó, không phải thứ tự ký tự ASCII. So sánh các giá trị được ánh xạ với các ký tự cụ thể đó trong bản đồ, nếu ký tự c1 xuất hiện trước c2 thì c1

Ví dụ

#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 << " ";
}

Đầu ra

programming india science hello computer