ich diesen einfachen Code haben:std :: set Einsatz mit initialiser Listen
struct Base
{
Base(int xx, int yy) : x(xx), y(yy){}
bool operator<(const Base& b) const {return (x < b.x) || (x==b.x && y < b.y);}
int x;
int y;
};
struct D1 : Base
{
D1(int x, int y) : Base(x, y){}
};
struct D2 : Base
{
D2(int x = 0, int y = 0) : Base(x, y){}
};
void test()
{
std::set<D1> s1;
std::set<D2> s2;
s1.insert({1, 2});
s2.insert({1, 2});
std::cout<<"s1 size:"<<s1.size()<<std::endl<<"Content:"<<std::endl;
for(auto& v : s1)
{
std::cout<<v.x<<" "<<v.y<<std::endl;
}
std::cout<<std::endl<<"s2 size:"<<s2.size()<<std::endl<<"Content:"<<std::endl;
for(auto& v : s2)
{
std::cout<<v.x<<" "<<v.y<<std::endl;
}
}
Mit der Ausgabe:
s1 size:1
Content:
1 2
s2 size:2
Content:
1 0
2 0
Warum ist das Verhalten anders, wenn Objekte mit Standardargumente einfügen? Ist das ein Fehler oder ist es das beabsichtigte Verhalten?
PS: Sie können den Code in Aktion sehen hier: https://ideone.com/UPArOi