3
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
int order[26];
struct lexcmp
{
bool operator()(const string &s1,const string &s2)
{
int i=0;
int j=min(s1.size(),s2.size());
while(1)
{
if(order[s1[i]-'a']<order[s2[i]-'a'])
return true;
if(order[s1[i]-'a']>order[s2[i]-'a'])
return false;
if(i==j-1)
return false;
i++;
}
}
};
int main()
{
string s;
cin>>s;
for(int i=0;i<s.size();i++)
{
order[s[i]-'a']=i;
}
set<string,lexcmp> store;
int m;
cin>>m;
while(m--)
{
string q;
cin>>q;
store.insert(q);
}
for(auto i=store.begin();i!=store.end();i++)
{
cout<<*i<<endl;
}
}
return 0;
}
- Проблема в том, что делает пользовательский Functor Проблема заключается в том, что у меня есть новый порядок элементов (вместо простого а-г). // Сохранено в порядке массива
- Все, что я хочу, - это упорядочить заданные строки на основе нового порядка.
- , например: Заказ: bacdefghijklmnopqrstuvwxyz Итак, если строки ss, aa, bb Новый заказ будет bb, aa, ss.
- Код работает нормально, но это дает мне проблему, в то время как строки похожи на «pas» «p» для сравнения. p должен прийти до того, как он появится, но он наступит после.
- Какие изменения следует делать в функторе?
«* для например: Заказ: bacdefghijklmnopqrstuvwxyz Так что, если строки сс, аа, бб Нового упорядочения будут аа, бб , ss. * «Почему бы не быть« bb, aa, ss », учитывая, что' b' предшествует 'a'? – ildjarn
Извините, мне плохо. –
У вас есть потенциальное неопределенное поведение, если вы сравниваете одинаковые строки. Вам не хватает 'if (i == j) return 0;' before 'i ++' в вашем цикле. – HolyBlackCat