Допустим, p ниже должен быть указателем на const X. Тогда невозможно вызвать find для набора указателей на X с моим специальным классом сравнения. Это недостаток слов «набор» и «найти»? Безопасно ли решить эту проблему с помощью const_cast, как это сделал я?
struct X{
std::string key;
X(std::string s): key(s) {}
};
struct compare {
bool operator() (const X* lhs, const X* rhs) const {
return lhs->key < rhs->key;
}
};
int main() {
std::set<X*,compare> m;
const X a("hello");
const X*p=&a;
std::set<X*,compare>::const_iterator it=m.find(const_cast<X*>(p));
}