我有一个vector < pair <double, int> >
,其中double
代表一个人的体重,int
代表那个人的身份。
现在我需要将其转换为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
集合中应该只有 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;
}
};
注意:问题仍然悬而未决,@Robᵩ 的回答并没有完全解决问题,但我感谢他的努力。