


Нужна помощь C++
Дана строка из 26 различных латинских букв - задаёт порядок сортировки между отдельными буквами: ba - будет означать, что в отсортированной строке b должно идти раньше a. Также даны N строк которые необходимо отсортировать между собой, используя указанное отношение порядка.
Входные данные
В первой строке вводится строка p из 26 символов - буквы латинского алфавита, расположенные в каком-то порядке (перестановка алфавита).
Во второй строке вводится число N (1≤N≤100)
- число строк, которые необходимо отсортировать.
Далее вводится N строк si
(1≤|si|≤100
), которые необходимо отсортировать в соответствии с заданным порядком сортировки.
Выходные данные
Необходимо вывести N строк, отсортированных в заданном порядке.
Пример
входные данныеСкопировать
5
qwertyuiopasdfghjklzxcvbnm
vnbhfgtyr
abacaba
qwer
qvbnm
zhu
выходные данныеСкопировать
qwer
qvbnm
abacaba
zhu
vnbhfgtyr
#include <algorithm>
#include <iostream>
#include <string>
#include <unordered_map>
#include <vector>
using namespace std;
int main() {
unordered_map<char, int> abc;
for (int n = 1; n <= 26; ++n) {
auto letter = cin.get();
abc[letter] = n;
}
cout << abc['a'] << '\n';
size_t count;
cin >> count;
vector<string> words(count);
for (auto& word : words) cin >> word;
puts("");
auto compare = [&abc](const string& a, const string& b) {
const auto length = min(a.length(), b.length());
for (size_t i = 0; i < length; ++i) {
if (abc[a[i]] != abc[b[i]]) {
return abc[a[i]] < abc[b[i]];
}
}
return a.length() < b.length();
};
sort(words.begin(), words.end(), compare);
for (const auto& word : words) cout << word << '\n';
}
#include <iostream>
#include <vector>
#include<cmath>
#include<numeric>
#include<algorithm>
#include<string>
#include<map>
using namespace std;
typedef long long ll;
vector<int> s(26);
bool cmp(string& a, string& b){
int sz = min((int)a.size(),(int)b.size());
for(int i = 0;i<sz;i++){
if(a[i]!=b[i]){
return s[a[i] - 'a'] < s[b[i] - 'a'];
}
}
return a.size() < b.size();
}
int main(){
int n;
char buf;
cin >> n;
for(int i = 0;i<26;i++){
cin >> buf;
s[buf - 'a'] = i;
}
vector<string> a(n);
for(auto&i:a){
cin >> i;
}
sort(a.begin(),a.end(),cmp);
for(auto&i:a){
cout << i << '\n';
}
}
Для решения этой задачи, вы можете воспользоваться языком программирования C++ и стандартной библиотекой для сортировки пользовательских данных. Вот пример кода, который решает задачу:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string p;
cin >> p;
// Создаем вектор, в котором будем хранить пары символов и их порядок.
vector<pair<char, char>> order(26);
for (int i = 0; i < 26; ++i) {
order[i] = {p[i], 'a' + i}; // символы и их порядок
}
// Сортируем порядок в соответствии с первым символом пары.
sort(order.begin(), order.end());
int N;
cin >> N;
vector<string> strings(N);
for (int i = 0; i < N; ++i) {
cin >> strings[i];
}
// Сортируем строки в соответствии с заданным порядком.
sort(strings.begin(), strings.end(), [&](const string& a, const string& b) {
int len = min(a.length(), b.length());
for (int j = 0; j < len; ++j) {
if (a[j] != b[j]) {
return order[a[j] - 'a'] < order[b[j] - 'a'];
}
}
return a.length() < b.length();
});
// Выводим отсортированные строки.
for (const string& s : strings) {
cout << s << endl;
}
return 0;
}
Этот код сначала создает вектор пар, где каждая пара содержит символ и его порядок сортировки. Затем он сортирует порядок сортировки в соответствии с первым символом пары. Далее он считывает строки, которые необходимо отсортировать, и сортирует их, используя заданный порядок.
Пример ввода и вывода в вашем вопросе должны работать с этим кодом.