STLを使用してintキーでソートしたいクラスAへのポインタのベクトルがあります。これを行うには、私は、定義されたクラスでoperator <
lower_boundを使用してソートされたベクトルに値を挿入する方法
bool operator< (const A &lhs, const A &rhs){
return (lhs.key < rhs.key);
};
と私の挿入機能では、私は新しい要素を配置することができます最初の場所を返すようにlower_bound
を期待
vector<A*>::iterator it = lower_bound(vec.begin(), vec.end(), element);
vec.insert(it, element);
ように見えますが、それはありませんうまくいかない。キー0,1,2,3のオブジェクトを挿入すると、ベクトルが不正確な順番(2,3,1,0)になります。何故ですか ?
たぶん私はまた、このオブジェクトのためのコンパレータを使用することができます。
compare function for upper_bound/lower_bound
が、どのような私のコードが悪いですの?
はで自分自身を撮影するようなものです「少なくとも私は頭が痛い」と言った。ベクトルの全ポイントは、明示的なヒープメモリ管理から身を守ることですが、ポインタのベクトルを使用するということは、ヒープメモリをまだ管理していることを意味します。 'ベクトル'または 'ベクトル>' –
john
@ジョンを使用してください。何故ですか ?これが悪い習慣なら、私はおそらくそれを変更しようとします – rank1
なぜですか?明示的なヒープメモリ管理が悪いのはなぜですか?主に、それは困難で、豊富なバグの原因です。誰かが 'new'と' delete'を適切にやっていないという問題があるので、1000sと1000sの投稿があります。間違いなく悪い習慣とみなされます。 – john