Проблема в том, что set
по определению является ассоциативным контейнером, в котором сами элементы являются ключами.Однако вам кажется, что вам нужен контейнер, в котором ключ - это скорее выражение, производное от элемента, но не от самого элемента.
Так что, если вы когда-нибудь будете искать стоимость вашего состояния,тогда сделайте это map<int, State*>
с ценой, являющейся ключом.Если вы хотите выполнить поиск по самому состоянию и по стоимости (и, возможно, другим свойствам), то я бы предложил использовать Boost MultiIndex , что позволяет иметь несколько индексов (включаяидентичность, как набор) над одним контейнером.Если вы используете упорядоченный индекс для getCost()
, вы также получите upper_bound()
для этого индекса, который будет делать именно то, что вы хотите.