Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จัดเรียงอาร์เรย์ของสตริงตามลำดับตัวอักษรที่กำหนดโดยสตริงอื่นใน C++


สมมติว่าเรามีอาร์เรย์ของสตริง และมีสตริงอื่นสำหรับการอ้างอิง เราต้องใช้สตริงอ้างอิงและใช้ลำดับของอักขระในสตริงอ้างอิง เราจะจัดเรียงอาร์เรย์สตริง เรากำลังพิจารณาสตริงในอาร์เรย์ และสตริงอ้างอิงเป็นอักษรตัวพิมพ์เล็ก

สมมติว่าอาร์เรย์สตริงมีลักษณะดังนี้:["hello", "programming", "science", "computer", "india"] สตริงอ้างอิงมีลักษณะดังนี้:"pigvxbskyhqzelutoacfjrndmw" หลังจากจัดเรียงสตริงเอาต์พุตจะเป็น ["programming ”, “อินเดีย”, “วิทยาศาสตร์”, “สวัสดี”, “คอมพิวเตอร์”]

งานนี้ง่าย เราต้องสำรวจสตริงอ้างอิง จากนั้นเก็บอักขระลงในแผนที่เป็นคีย์ และดัชนีเป็นค่า ในการจัดเรียงสตริง เราต้องเปรียบเทียบสตริงตามแผนที่นั้น ไม่ใช่การเรียงลำดับอักขระ 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