Мне нужна структура, в которую я могу вставлять элементы, не иметь дубликатов, использовать собственный компаратор и сначала иметь наименьший элемент. Я пытался использовать std::priority_queue
, но проблема в том, что я получаю много дубликатов и у меня заканчивается свободное место. Поэтому я подумал об использовании std::set
:
std::set< std::pair<Coordinates, int>, Compare> positions;
, где
Coordinates
{
public:
Coordinates(int x = 0, int y = 0, char tool = 'T') : x(x), y(y), tool(tool) {}
public:
int x, y;
char tool;
};
class Compare
{
public:
bool operator() (const std::pair<Coordinates, int>& c1, const std::pair<Coordinates, int>& c2) const
{
return c1.second < c2.second;
}
};
Я хочу, чтобы элементы были отсортированы на основе второго элемента пары, которым является эта реализацияделает, но проблема в том, что он использует тот же компаратор при вставке новых пар, и я получаю дубликаты.
У меня такой вопрос: можно ли сделать std::set
, чтобы запретить дубликаты, а также упорядочить элементы на основе второго элемента пары?
Редактировать: Устранен некоторый код, который не был необходим, и измененв Compare
> с <</p>