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