Eu dei um tapinha no seu exemplo para funcionar com o VS 2010, talvez funcione também com qualquer versão moderna do g++.
#include<set>#include<string>#include<iostream>#include<iterator>usingnamespacestd;structPoint{intx,y;Point():x(0),y(0){}Point(intx,inty):x(x),y(y){}booloperator<(constPoint&other)const{if(x<other.x)returntrue;if(x==other.x)returny<other.y;returnfalse;};};std::ostream&operator<<(ostream&os,constPoint&p){os<<"("<<p.x<<","<<p.y<<")";returnos;}std::set<Point>area;intmain(intargc,char*argv[]){area.insert(Point(0,0));area.insert(Point(2,0));area.insert(Point(0,2));area.insert(Point(2,2));// Para imprimir os elementos:std::ostream_iterator<Point>out_it(std::cout,", ");std::copy(area.begin(),area.end(),out_it);}
DavidUser
estou usando o VS 2013 Preview, funciona perfeitamente a inicialização no modo lista do C++11, pois com list que não exige sobrecarga do operador < funciona normalmente
DavidUser
Estranhamente o problema foi resolvido com a sobrecarga que você indicou, muito obrigado entanglement.
Digo estranhamente pois parece funcionalmente o mesmo.
Porque isso acontece!?
DavidUser
Perdão finalmente entendi muito obrigado entanglement, realmente temos o caso em que o teste x < other.x falha pois x > other.x que significa que o ponto não é menor que o other, mas ainda sim é testado y < other.y.
Erro lógico catastrófico kkkk perdão.