У меня есть vector < pair <double, int> >
, здесь double
представляет вес человека и int
представляет собой идентификатор этого человека.std :: набор, содержащий пару с обычным компаратором
Теперь мне нужно его преобразовать в set < pair < double, int > >
, чтобы удалить дубликаты на основе id
этого человека, но внутри вектора у меня есть данные с некоторой степенью точности.
Пример:
-----------------------
double | int
-----------------------
10.234 | 1 <--
20.123 | 2
10.2 | 1 <--
30.33 | 3
Как мы можем видеть, id 1
имеет вес в разной точностью.
Использования компаратора по умолчанию так std::set
приведет с 4 элементов в наборе, но мне нужно только 3.
только один элемент с id 1
должен быть там в наборе (любой из двух конкурентов будут делать) ,
Примечание: Причина, по которой я не использую std::map
, состоит в том, что мне нужно, чтобы она была в определенной последовательности. Вот компаратор, который я уже использую для заказа, которого хочу.
struct comp__f {
bool operator() (const pair<double, int>& lhs, const pair<double, int>& rhs) const{
if(lhs.first < rhs.first) return true;
if(lhs.first > rhs.first) return false;
return lhs.second > rhs.second;
}
};
Update: Мне нужно, чтобы заказать по весу, что причина, я использую выше компаратор
UPDATE2: Вопрос остается открытым, @ ответ Robᵩ в не полностью решить проблему, но я ценю его усилие.
Что такое «определенная последовательность» вам нужен набор, чтобы иметь? –