カスタムコンパレータ関数を使用してオブジェクトをC++に格納したいのですがstd::map
、例:
std::map<Part, Inventory, PartCmp>
コンパレータについては、計算にコストがかかる可能性のある「キー」でオブジェクトを並べ替えたいので、遅延評価方法を考えました。以下の例は些細なことですが、問題を示しています。
class Part {
public:
std::string item_id;
int color_id;
int condition;
std::string name;
std::string category;
std::string key();
private:
std::string key_;
}
std::string Part::key() {
// Only create key value if it hasn't been done before
if (key_.empty()) {
ostringstream keystream;
keystream << item_id << color_id << condition;
key_ = keystream.str();
}
return key_;
}
これは、私のコンパレータが次のように見えることを意味します。
struct PartCmp {
bool operator() (Part& p1, Part& p2) const {
return p1.key() < p2.key();
}
};
これは、パラメータとして宣言されてp1
いる他のすべての例とは異なります。p2
const
ただし、この場合p1
、メソッドがそれぞれのオブジェクトを変更するため、p2
として宣言することはできません。コードはコンパイルされますが、これは悪いことですか?const
key()