class Information
{
public:
const std::string comp_num() const;
const std::string comp_address() const;
void set_comp_address( const std::string& comp_address );
void set_comp_num( const std::string& comp_num );
private:
std::string comp_address_;
std::string comp_num_;
};
class Compare
{
public:
bool operator()(Information lf, Information rt)
{
return( lf.comp_num() == rt.comp_num() );
}
};
// somwhere in function
std::set< Information ,Compare> test_set;
for( std::vector< Information >::iterator i = old_vector.begin() ; i != old_vector.end(); ++i )
{
// store all sub_cateeogroy in set
std::cout << i->comp_num() << std::endl;// works fine
test_set.insert( *i ); // fails why ? Application crashes
}
答案 0 :(得分:0)
std::set
要求比较器保留strict weak ordering个元素。你的比较器没有,因为它不能满足反射性和不对称性要求,也可能是其它因素。将比较器更改为以下内容将修复错误,但可能无法保留所需的语义。
class Compare
{
public:
bool operator()(Information const& lf, Information const& rt) const
{
return( lf.comp_num() < rt.comp_num() );
}
};
请注意,不需要将参数更改为Information const&
,但它可以避免不必要的复制。