我想在 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()
方法修改了其各自的对象。代码可以编译,但这是一件坏事吗?