Dieser Code anders verhält, wenn ich eine Bedingung hinzu:Einfügen Paar in std :: gesetzt ist inkonsistent (nicht erkennt <pair> .second)
Erster Fall:
#include<bits/stdc++.h>
using namespace std;
struct comp
{
bool operator()(pair<int,pair<int,int> > a, pair<int,pair<int,int> > b)
{
return a.first>b.first;
}
};
int main()
{
set<pair<int,pair<int,int>>,comp> s;
auto d = s.insert({4,{6,10}});
cout<<(d.first)->first<<" "<<(d.first)->second.first<<" "<<(d.first)->second.second<<endl;
d = s.insert({4,{0,4}});
cout<<(d.first)->first<<" "<<(d.first)->second.first<<" "<<(d.first)->second.second<<endl;
}
Ausgabe
4 6 10
4 6 10
Zweiter Fall: (mit condit Ion auf .second)
#include<bits/stdc++.h>
using namespace std;
struct comp
{
bool operator()(pair<int,pair<int,int> > a, pair<int,pair<int,int> > b)
{
if(a.first==b.first)
return a.second.first<b.second.first;
return a.first>b.first;
}
};
int main()
{
set<pair<int,pair<int,int>>,comp> s;
auto d = s.insert({4,{6,10}});
cout<<(d.first)->first<<" "<<(d.first)->second.first<<" "<<(d.first)->second.second<<endl;
d = s.insert({4,{0,4}});
cout<<(d.first)->first<<" "<<(d.first)->second.first<<" "<<(d.first)->second.second<<endl;
}
Ausgang:
4 6 10
4 0 4
Warum fügt sich das Gerät nicht ein anderes Paar im ersten Fall? Ich dachte, die Extra-Bedingung entscheidet nur über die Reihenfolge und unterscheidet nicht zwischen den Elementen.
Weil du falsch gedacht hast? – juanchopanza
@juanchopanza;) – goelakash
Bitte sagen Sie: Wer hat Ihnen gesagt, dass Sie diesen Header hinzufügen? Wir müssen die Menschen davor warnen, von dieser Quelle Ratschläge zu erhalten. –