0

我想在 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参数。

但是,在这种情况下p1p2不能声明为const因为该key()方法修改了其各自的对象。代码可以编译,但这是一件坏事吗?

4

1 回答 1

5

您可能想要声明该字段

private:
   mutable std::string key_;

看到这个问题

而且,正如juanchopanza的评论所建议的那样,制定你的key()方法const

最后,我相信你更多的是做一些记忆,而不是一些懒惰的评价

于 2013-01-17T20:36:40.273 回答