私はペアのセットを注文する必要があります(1つはint、2つ目はcharです)。私はこのように注文しなければなりません。 12 G、11 F、10 A、10 B、10 C最初は降順、2番目は昇順) が最初に表示されます。これは私がこれまで試したものです、と私は若干の誤差が出る:私が得るC++で2つの順序付け基準(ペアのセット)を使用して順序付きセットを作成する方法は?
#include <iostream>
#include <fstream>
#include <algorithm>
#include <utility>
#include <set>
using namespace std;
set <pair <int,char> > s;
bool myfunction(const pair<int, char>& i, const pair<int, char>& j) {
if(i.first < j.first) return false;
if(j.first < i.first) return true;
return j.second < i.second;
}
void writes()
{ set <pair<int,char> >::iterator it;
for (it = s.begin();it<= s.end();it++) /// line (18)
cout<<(*it).second<<" "<<(*it).first<<"\n\n";
}
int main()
{ ifstream f("info.in");
int n;
f>>n;
for (int i=1;i<=n;i++)
{ pair<int,char> x;
int st;
char nd;
f>>st;
f>>nd;
x.first=st;
x.second=nd;
s.insert(x);
}
writes();
}
最初のエラーは、ライン(18)である:「演算子< =」の一致(オペランドの型は「STDません::
5
10 B
10 A
10 C
11 F
12 G
@Sam Varshavchik、エラーで私の問題を解決しましたありがとう!:設定> :: .....
あなたの助けを大幅に
私の入力ファイルは次のようになり感謝しています。 しかし、まだ、私は必要な出力が得られません。 私は唯一得る:
10 A
10 B
10 C
11 F
12 G
ペアで注文基準を変更することは可能ですか?そうでない場合は、代わりに何をお勧めしますか?
注文基準のmyfunctionはプログラムによってまだ無視されているようです。どのように私は私のペアの中にそれをオーバーロード?それはちょうどそこに座って、決して使用されていないように見えます。 Using custom std::set comparator それはまだ
using namespace std;
struct lex_compare {
bool operator()(const pair<int, char>& i, const pair<int, char>& j)
{
if(i.first != j.first)
{
return (i.first > j.first);
}
return (j.second > i.second);
}
} // forgot ";", after adding it, it works perfectly.
set <pair <int,char>, lex_compare > s; ///line (22)
void writes()
{ set <pair<int,char> >::iterator it;
for (it = s.begin();it!= s.end();it++) /// line (18)
cout<<(*it).second<<" "<<(*it).first<<"\n\n";
}
int main()
{ ifstream f("info.in");
int n;
f>>n;
for (int i=1;i<=n;i++)
{ pair<int,char> x;
int st;
char nd;
f>>st;
f>>nd;
x.first=st;
x.second=nd;
s.insert(x);
}
writes();
}
ERROR働いていない:ライン(22):このプログラムは私もこの試みたにかかわらず、仕事
それをしない「S」の前に無効宣言子を。
'、//それを追加した後、完全に動作します。'単純な誤植に基づいて投票を終了します。 –